公司乙個專案要進行交易資料傳輸,因為這個專案銀行那邊也是剛剛開始啟動,所有的支援只有乙個傳輸欄位的說明文件,好吧,總的有人做事不是嘛,於是介面開發正式展開,第一步的難點就是加密解密,我選擇使用openssl.
openssl初接觸的人恐怕最難的在於先理解各種概念
openssl是乙個功能強大的工具包,它整合了眾多密碼演算法及實用工具。我們即可以利用它提供的命令臺工具生成金鑰、證書來加密解密檔案,也可以在利用其提供的api介面在**中對傳輸資訊進行加密。
rsa是乙個非對稱加密演算法。簡單說來,非對稱加密演算法就是說加密解密乙個檔案需要有兩個金鑰,乙個用來加密,為公鑰,乙個用來解密,為私鑰。證書可以用來授權公鑰的使用。
公鑰/私鑰/簽名/驗證簽名/加密/解密/非對稱加密
因為公鑰加密的資料只有它相對應的私鑰可以解開,所以你可以把公鑰給人和人,讓他加密他想要傳送給你的資料,這個資料只有到了有私鑰的你這裡,才可以解開成有用的資料,其他人就是得到了,也看懂內容.同理,如果你用你的私鑰對資料進行簽名,那這個資料就只有配對的公鑰可以解開,有這個私鑰的只有你,所以如果配對的公鑰解開了資料,就說明這資料是你發的,相反,則不是.這個被稱為簽名.
實際應用中,一般都是和對方交換公鑰,然後你要發給對方的資料,用他的公鑰加密,他得到後用他的私鑰解密,他要發給你的資料,用你的公鑰加密,你得到後用你的私鑰解密,這樣最大程度保證了安全性.
rsa/dsa/sha/md5
非對稱加密的演算法有很多,比較著名的有rsa/dsa ,不同的是rsa可以用於加/解密,也可以用於簽名驗籤,dsa則只能用於簽名.至於sha則是一種和md5相同的演算法,它不是用於加密解密或者簽名的,它被稱為摘要演算法.就是通過一種演算法,依據資料內容生成一種固定長度的摘要,這串摘要值與原資料存在對應關係,就是原資料會生成這個摘要,但是,這個摘要是不能還原成原資料的,嗯....,正常情況下是這樣的,這個演算法起的作用就是,如果你把原資料修改一點點,那麼生成的摘要都會不同,傳輸過程中把原資料給你再給你乙個摘要,你把得到的原資料同樣做一次摘要演算法,與給你的摘要相比較就可以知道這個資料有沒有在傳輸過程中被修改了.
實際應用過程中,因為需要加密的資料可能會很大,進行加密費時費力,所以一般都會把原資料先進行摘要,然後對這個摘要值進行加密,將原資料的明文和加密後的摘要值一起傳給你.這樣你解開加密後的摘要值,再和你得到的資料進行的摘要值對應一下就可以知道資料有沒有被修改了,而且,因為私鑰只有你有,只有你能解密摘要值,所以別人就算把原資料做了修改,然後生成乙個假的摘要給你也是不行的,你這邊用金鑰也根本解不開.
ca/pem/der/x509/pkcs
一般的公鑰不會用明文傳輸給別人的,正常情況下都會生成乙個檔案,這個檔案就是公鑰檔案,然後這個檔案可以交給其他人用於加密,但是傳輸過程中如果有人惡意破壞,將你的公鑰換成了他的公鑰,然後得到公鑰的一方加密資料,不是他就可以用他自己的金鑰解密看到資料了嗎,為了解決這個問題,需要乙個公證方來做這個事,任何人都可以找它來確認公鑰是誰發的.這就是ca,ca確認公鑰的原理也很簡單,它將它自己的公鑰發布給所有人,然後乙個想要發布自己公鑰的人可以將自己的公鑰和一些身份資訊發給ca,ca用自己的金鑰進行加密,這裡也可以稱為簽名.然後這個包含了你的公鑰和你的資訊的檔案就可以稱為證書檔案了.這樣一來所有得到一些公鑰檔案的人,通過ca的公鑰解密了檔案,如果正常解密那麼機密後裡面的資訊一定是真的,因為加密方只可能是ca,其他人沒它的金鑰啊.這樣你解開公鑰檔案,看看裡面的資訊就知道這個是不是那個你需要用來加密的公鑰了.
實際應用中,一般人都不會找ca去簽名,因為那是收錢的,所以可以自己做乙個自簽名的證書檔案,就是自己生成一對金鑰,然後再用自己生成的另外一對金鑰對這對金鑰進行簽名,這個只用於真正需要簽名證書的人,普通的加密解密資料,直接用公鑰和私鑰來做就可以了.
金鑰檔案的格式用openssl生成的就只有pem和der兩種格式,pem的是將金鑰用base64編碼表示出來的,直接開啟你能看到一串的英文本母,der格式是二進位制的金鑰檔案,直接開啟,你可以看到........你什麼也看不懂!.x509是通用的證書檔案格式定義.pkcs的一系列標準是指定的存放金鑰的檔案標準,你只要知道pem der x509 pkcs這幾種格式是可以互相轉化的.
openssl使用
RSA使用總結(ios,openssl)
rsa 使用openssl庫可方便實現rsa加解密,網上的資料很多,不詳述。金鑰通常有兩種方式,一種是字串格式的公私鑰,通常是 begin public key 開頭,end public key 結尾並且沒有換行的字串,這是pkcs8格式的 在這裡,重點說第二種,就是使用n,e,d表示的金鑰,其中...
ssh 通過rsa金鑰進行登入
ssh登入伺服器的方法大體上分為兩種 通過ssh使用使用者名稱密碼的方式登入 通過ssh使用金鑰對進行登入 本文主要闡述如何使用金鑰進行登入,以如如何管理多個金鑰對。即然是金鑰對,就說是兩個金鑰,我們把其中乙個需要存在本地計算機的金鑰稱為私鑰,把另乙個存放到伺服器的金鑰稱為公鑰。私鑰 要保護好的,不...
php sll郵箱註冊 PHP進行RSA加密解密
最近在著手寫乙個服務端安全介面規範,需要用到rsa加密解密。所以小試牛刀一下,並且做個記錄。環境 win7 64位 php 5.6.12 需要原型工具 一 安裝openssl 隨意安裝到 二 cmd中進入到opensll的bin目錄下進行私鑰和公鑰的生成 生成私鑰openssl genrsa out...