常見加密算法

七種算法:BASE6四、MD五、SHA、HMAC、RSA 、AES、ECC
 
MD五、SHA、HMAC、RSA這四種加密 算法,可謂是非可逆加密,就是不可解密的加密方法,咱們稱之爲單向加密算法。
 
1、BASE64 
按照RFC2045的定義,Base64被定義爲:Base64內容傳送編碼被設計用來把任意序列的8位字節描述爲一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.) 
常見於郵件、http加密,截取http信息,你就會發現登陸操做的用戶名、密碼字段經過BASE64加密的。
 
主要就是BASE64Encoder、BASE64Decoder兩個類,咱們只須要知道使用對應的方法便可。另,BASE加密後產生的字節位數是8的倍數,若是不夠位數以=符號填充。
 
2、MD5
MD5 -- message-digest algorithm 5 (信息-摘要算法)縮寫,普遍用於加密和解密技術,經常使用於文件校驗。校驗?無論文件多大,通過MD5後都能生成惟一的MD5值。比如如今的ISO校驗,都是MD5校驗。怎麼用?固然是把ISO通過MD5後產生MD5的值。通常下載linux-ISO的朋友都見過下載連接旁邊放着MD5的串。就是用來驗證文件是否一致的。
 
一般咱們不直接使用上述MD5加密。一般將MD5產生的字節數組交給BASE64再加密一把,獲得相應的字符串。
 
3、SHA
SHA(Secure Hash Algorithm,安全散列算法),數字簽名等密碼學應用中重要的工具,被普遍地應用於電子商務等信息安全領域。雖然,SHA與MD5經過碰撞法都被破解了, 可是SHA仍然是公認的安全加密算法,較之MD5更爲安全。 
 
4、HMAC
HMAC(Hash Message Authentication Code,散列消息鑑別碼,基於密鑰的Hash算法的認證協議。消息鑑別碼實現鑑別的原理是,用公開函數和密鑰產生一個固定長度的值做爲認證標識,用這個標識鑑別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,而後傳輸。接收方利用與發送方共享的密鑰進行鑑別認證等。
 
五.RSA加密
RSA非對稱加密算法
非對稱加密算法須要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)
公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密
特色:
非對稱密碼體制的特色:算法強度複雜、安全性依賴於算法與密鑰可是因爲其算法複雜,而使得加密解密速度沒有對稱加密解密的速度快
對稱密碼體制中只有一種密鑰,而且是非公開的,若是要解密就得讓對方知道密鑰。因此保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就能夠不須要像對稱密碼那樣傳輸對方的密鑰了
基本加密原理:
(1)找出兩個「很大」的質數:P & Q
(2)N = P * Q
(3)M = (P – 1) * (Q – 1)
(4)找出整數E,E與M互質,即除了1以外,沒有其餘公約數
(5)找出整數D,使得E*D除以M餘1,即 (E * D) % M = 1
通過上述準備工做以後,能夠獲得:
E是公鑰,負責加密
D是私鑰,負責解密
N負責公鑰和私鑰之間的聯繫
加密算法,假定對X進行加密
(X ^ E) % N = Y
n根據費爾馬小定義,根據如下公式能夠完成解密操做
(Y ^ D) % N = X
 
可是RSA加密算法效率較差,對大型數據加密時間很長,通常用於小數據。
經常使用場景:
分部要給總部發一段報文,先對報文整個進行MD5獲得一個報文摘要,再對這個報文摘要用公鑰加密。而後把報文和這個RSA密文一塊兒發過去。
總部接收到報文以後要先肯定報文是否在中途被人篡改,就先把這個密文用私鑰解密獲得報文摘要,再和整個報文MD5一下獲得的報文摘要進行對比 若是同樣就是沒被改過。
 
6、AES
AES是開發中經常使用的加密 算法之一。然而因爲先後端開發使用的語言不統一,致使常常出現前端加密然後端不能解密的狀況出現。然而不管什麼語言系統,AES的算法老是相同的, 所以致使結果不一致的緣由在於 加密設置的參數不一致 。因而先來看看在兩個平臺使用AES加密時須要統一的幾個參數。
密鑰長度(Key Size) 加密模式(Cipher Mode) 填充方式(Padding) 初始向量(Initialization Vector)
密鑰長度
AES算法下,key的長度有三種:12八、192和256 bits。因爲歷史緣由,JDK默認只支持不大於128 bits的密鑰,而128 bits的key已可以知足商用安全需求。所以本例先使用AES-128。( Java使用大於128 bits的key方法在文末說起)
加密模式
AES屬於塊加密(Block Cipher),塊加密中有CBC、ECB、CTR、OFB、CFB等幾種工做模式。本例統一使用CBC模式。
填充方式
因爲塊加密只能對特定長度的數據塊進行加密,所以CBC、ECB模式須要在最後一數據塊加密前進行數據填充。(CFB,OFB和CTR模式因爲與key進行加密操做的是上一塊加密後的密文,所以不須要對最後一段明文進行填充)
iOS SDK中提供了PKCS7Padding,而JDK則提供了PKCS5Padding。原則上PKCS5Padding限制了填充的Block Size爲8 bytes,而Java實際上當塊大於該值時,其PKCS5Padding與PKCS7Padding是相等的:每須要填充χ個字節,填充的值就是χ。 
初始向量
使用除ECB之外的其餘加密模式均須要傳入一個初始向量,其大小與Block Size相等(AES的Block Size爲128 bits),而兩個平臺的API文檔均指明當不傳入初始向量時,系統將默認使用一個全0的初始向量。
有了上述的基礎以後,能夠開始分別在兩個平臺進行實現了。
iOS實現
先定義一個初始向量的值。
NSString *const kInitVector = @"16-Bytes--String";
肯定密鑰長度,這裏選擇 AES-128。
size_t const kKeySize = kCCKeySizeAES128;
 
7、ECC
ECC是EllipticCurves Cryptography的縮寫,意爲橢圓曲線密碼編碼學。和RSA 算法同樣,ECC算法也屬於公開密鑰算法。最初由Koblitz和Miller兩人於1985年提出,其數學基礎是利用橢圓曲線上的有理點構成Abel加法羣上橢圓離散對數的計算困難性。
ECC算法的數學理論很是深奧和複雜,在工程應用中比較難於實現,但它的單位安全強度相對較高,它的破譯或求解難度基本上是指數級的,黑客很難用一般使用的暴力破解的方法來破解。RSA算法的特色之一是數學原理相對簡單,在工程應用中比較易於實現,但它的單位安全強度相對較低。所以,ECC算法的能夠用較少的計算能力提供比RSA加密算法更高的安全強度,有效地解決了「提升安全強度必須增長 密鑰長度」的工程實現問題。
 
與RSA算法相比,ECC算法擁有突出優點:
一、更適合於移動互聯網:ECC加密算法的密鑰長度很短(256位),意味着佔用更少的存儲空間,更低的CPU開銷和佔用更少的帶寬。隨着愈來愈多的用戶使用移動設備來完成各類網上活動,ECC加密算法爲移動互聯網安全提供更好的客戶體驗。
二、更好的安全性:ECC加密算法提供更強的保護,比目前的其餘加密算法能更好的防止攻擊,使你的網站和基礎設施比用傳統的加密方法更安全,爲移動互聯網安全提供更好的保障。
三、更好的性能: ECC加密算法須要較短的密鑰長度來提供更好的安全,例如,256位的ECC密鑰加密強度等同於3072位RSA密鑰的水平(目前普通使用的RSA密鑰長度是2048位)。其結果是你以更低的計算能力代價獲得了更高的安全性。經國外有關權威機構 測試,在Apache和IIS服務器採用ECC算法,Web服務器響應時間比RSA快十幾倍。
四、更大的IT投資回報:ECC可幫助保護您的基礎設施的投資,提供更高的安全性,並快速處理爆炸增加的移動設備的安全鏈接。 ECC的密鑰長度增長速度比其餘的加密方法都慢(通常按128位增加,而 RSA則是倍數增加,如:1024 –2048--4096),將延長您現有硬件的使用壽命,讓您的投資帶來更大的回報。
 
ECC加密算法的通用性不斷加強
ECC加密算法自1985年提出,因其工程應用中難度較高,到2005年纔在各類 操做系統中得到普遍支持,在全球安全市場需求的刺激下,ECC算法將逐步取代RSA算法,成爲主流加密算法。目前,全球各大CA都已經陸續開始爲用戶簽發採用ECC加密算法的各類證書,沃通全球率先支持中文。經沃通大量測試,ECC加密算法之後支持全部操做系統、全部瀏覽器和各類移動終端,主要有:
Mozilla NSS 3.11以上版本支持
OpenSSL 1.0以上版本支持
微軟CryptoAPI Vista/Win7/Win8都支持
BouncyCastle 1.32以上版本支持
JSSE 6 以上版本支持
BSAFE 4.0 以上版本支持
各類版本的IE瀏覽器、火狐瀏覽器、谷歌瀏覽器和蘋果瀏覽器都支持
安卓系統(2.1以上版本)、蘋果 iOS(5.0以上版本) 、WindowPhone(各類版本)都支持
也就是說:沃通簽發的採用ECC加密算法的各類數字證書(SSL證書、代碼簽名證書及客戶端證書),不管是PC終端仍是各類移動設備都能很好地支持。
相關文章
相關標籤/搜索