原文:https://blog.csdn.net/qq_28205153/article/details/55798628
AES簡介
高級加密標準(AES,Advanced Encryption Standard)爲最常見的對稱加密算法(微信小程序加密傳輸就是用這個加密算法的)。對稱加密算法也就是加密和解密用相同的密鑰,具體的加密流程如下圖:
下面簡單介紹下各個部分的作用與意義:
-
明文P
沒有經過加密的數據。
-
密鑰K
用來加密明文的密碼,在對稱加密算法中,加密與解密的密鑰是相同的。密鑰爲接收方與發送方協商產生,但不可以直接在網絡上傳輸,否則會導致密鑰泄漏,通常是通過非對稱加密算法加密密鑰,然後再通過網絡傳輸給對方,或者直接面對面商量密鑰。密鑰是絕對不可以泄漏的,否則會被攻擊者還原密文,竊取機密數據。
-
AES加密函數
設AES加密函數爲E,則 C = E(K, P),其中P爲明文,K爲密鑰,C爲密文。也就是說,把明文P和密鑰K作爲加密函數的參數輸入,則加密函數E會輸出密文C。
-
密文C
經加密函數處理後的數據
-
AES解密函數
設AES解密函數爲D,則 P = D(K, C),其中C爲密文,K爲密鑰,P爲明文。也就是說,把密文C和密鑰K作爲解密函數的參數輸入,則解密函數會輸出明文P。
在這裏簡單介紹下對稱加密算法與非對稱加密算法的區別。
-
對稱加密算法
加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經常發送數據的場合。缺點是密鑰的傳輸比較麻煩。
-
非對稱加密算法
加密和解密用的密鑰是不同的,這種加密方式是用數學上的難解問題構造的,通常加密解密的速度比較慢,適合偶爾發送數據的場合。優點是密鑰傳輸方便。常見的非對稱加密算法爲RSA、ECC和EIGamal。
實際中,一般是通過RSA加密AES的密鑰,傳輸到接收方,接收方解密得到AES密鑰,然後發送方和接收方用AES密鑰來通信。
本文下面AES原理的介紹參考自《現代密碼學教程》,AES的實現在介紹完原理後開始。
AES的基本結構
AES爲分組密碼,分組密碼也就是把明文分成一組一組的,每組長度相等,每次加密一組數據,直到加密完整個明文。在AES標準規範中,分組長度只能是128位,也就是說,每個分組爲16個字節(每個字節8位)。密鑰的長度可以使用128位、192位或256位。密鑰的長度不同,推薦加密輪數也不同,如下表所示:
AES | 密鑰長度(32位比特字) | 分組長度(32位比特字) | 加密輪數 |
---|---|---|---|
AES-128 | 4 | 4 | 10 |
AES-192 | 6 | 4 | 12 |
AES-256 | 8 | 4 | 14 |
輪數在下面介紹,這裏實現的是AES-128,也就是密鑰的長度爲128位,加密輪數爲10輪。
。。。