1. 程式人生 > 實用技巧 >幾種常用的密碼加密演算法以及選用

幾種常用的密碼加密演算法以及選用

原連結:http://www.cnblogs.com/yangywyangyw/archive/2012/07/31/2620861.html

加 密演算法通常分為對稱性加密演算法和非對稱性加密演算法,對於對稱性加密演算法,資訊接收雙方都需事先知道密匙和加解密演算法且其密匙是相同的,之後便是對資料進行 加解密了。非對稱演算法與之不同,傳送雙方A,B事先均生成一堆密匙,然後A將自己的公有密匙傳送給B,B將自己的公有密匙傳送給A,如果A要給B傳送消 息,則先需要用B的公有密匙進行訊息加密,然後傳送給B端,此時B端再用自己的私有密匙進行訊息解密,B向A傳送訊息時為同樣的道理。

幾種對稱性加密演算法:AES,DES,3DES

DES是一種分組資料加密技術(先將資料分成固定長度的小資料塊,之後進行加密),速度較快,適用於大量資料加密,而3DES是一種基於DES的加密演算法,使用3個不同密匙對同一個分組資料塊進行3次加密,如此以使得密文強度更高。

相較於DES和3DES演算法而言,AES演算法有著更高的速度和資源使用效率,安全級別也較之更高了,被稱為下一代加密標準。

幾種非對稱性加密演算法:RSA,DSA,ECC

RSA和DSA的安全性及其它各方面效能都差不多,而ECC較之則有著很多的效能優越,包括處理速度,頻寬要求,儲存空間等等。

幾種線性雜湊演算法(簽名演算法):MD5,SHA1,HMAC

這幾種演算法只生成一串不可逆的密文,經常用其效驗資料傳輸過程中是否經過修改,因為相同的生成演算法對於同一明文只會生成唯一的密文,若相同演算法生成的密文不同,則證明傳輸資料進行過了修改。通常在資料傳說過程前,使用MD5和SHA1演算法均需要傳送和接收資料雙方在資料傳送之前就知道密匙生成演算法,而HMAC與之不同的是需要生成一個密匙,傳送方用此密匙對資料進行摘要處理(生成密文),接收方再利用此密匙對接收到的資料進行摘要處理,再判斷生成的密文是否相同。

對於各種加密演算法的選用:

由於對稱加密演算法的金鑰管理是一個複雜的過程,金鑰的管理直接決定著他的安全性,因此當資料量很小時,我們可以考慮採用非對稱加密演算法。

在實際的操作過程中,我們通常採用的方式是:採用非對稱加密演算法管理對稱演算法的金鑰,然後用對稱加密演算法加密資料,這樣我們就集成了兩類加密演算法的優點,既實現了加密速度快的優點,又實現了安全方便管理金鑰的優點。

如果在選定了加密演算法後,那採用多少位的金鑰呢?一般來說,金鑰越長,執行的速度就越慢,應該根據的我們實際需要的安全級別來選擇,一般來說,RSA建議採用1024位的數字,ECC建議採用160位,AES採用128為即可。

對於幾種加密演算法的內部實現原理,我不想研究的太透徹,這些問題就留給科學家們去研究吧。而對於其實現而言,網上有很多開源版本,比較經典的是PorlaSSL(官網:

http://en.wikipedia.org/wiki/PolarSSL)。其它語言如JAVA,OBJC也都有相應的類庫可以使用。以下附上自己用OC封裝的通用加密類:

RSA

https://www.cnblogs.com/techliang666/p/9164855.html

下載openssl.zip

1. 生成原始 RSA私鑰檔案 private_key.pem

openssl genrsa -out private_key.pem 1024

2. 將原始 RSA私鑰轉換為 pkcs8格式

openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out rsa_private_key.pem

3. 生成 RSA公鑰 rsa_public_key.pem

openssl rsa -in private_key.pem -pubout -out rsa_public_key.crt

4. 從公鑰 rsa_public_key.pem 獲取十六進位制的公鑰(第一段16進位制字串)

openssl asn1parse -out temp.ans -i -inform PEM<private_key.pem

最終獲取檔案列表:

rsa_private_key.pem

rsa_public_key.crt

16進位制公鑰字串用於js端加密