簡述AES加密算法

相信你一定用過微信小程序吧,那么如何保障你使用的小程序就是來自于正規(guī)渠道的呢?這就要用到我們今天文章的主角——AES加密算法。

AES加密算法全稱是Advanced Encryption Standard(高級加密標準),是最為常見的對稱加密算法之一。

AES具體的加密流程介紹

AES加密算法
圖片來源于網(wǎng)絡

 

下面簡單介紹下各個部分的作用與意義:

  • 明文P

沒有經(jīng)過加密的數(shù)據(jù)。

  • 密鑰K

用來加密明文的密碼,在對稱加密算法中,加密與解密的密鑰是相同的。密鑰為接收方與發(fā)送方協(xié)商產(chǎn)生,但不可以直接在網(wǎng)絡上傳輸,否則會導致密鑰泄漏,通常是通過非對稱加密算法加密密鑰,然后再通過網(wǎng)絡傳輸給對方,或者直接面對面商量密鑰。密鑰是絕對不可以泄漏的,否則會被攻擊者還原密文,竊取機密數(shù)據(jù)。

  • AES加密函數(shù)

設AES加密函數(shù)為E,則 C=E(K+P),其中P為明文,K為密鑰,C為密文。也就是說,把明文P和密鑰K作為加密函數(shù)的參數(shù)輸入,則加密函數(shù)E會輸出密文C。

  • 密文C

經(jīng)加密函數(shù)處理后的數(shù)據(jù)。

  • AES解密函數(shù)

設AES解密函數(shù)為D,則 P=D(K+C),其中C為密文,K為密鑰,P為明文。也就是說,把密文C和密鑰K作為解密函數(shù)的參數(shù)輸入,則解密函數(shù)會輸出明文P。

AES加密方法

AES為分組加密,分組加密也就是把明文分成一組一組的,每組的長度相等,每次加密一組數(shù)據(jù),直到加密完整個明文。

AES加密算法
圖片來源于網(wǎng)絡

在AES標準規(guī)范中,分組長度只能是128位,也就是說,每個分組為16個字節(jié),每個字節(jié)8位,密鑰的長度可以使用128位、192位或者258位。密鑰的長度不同,推薦加密輪數(shù)也不同,比如AES-128也就是密鑰的長度為128位,加密輪數(shù)為10輪,AES-192為12輪,AES-256為14輪。

以AES-128為例,加密中一輪的4個操作:字節(jié)代換、行位移、列混合、輪密鑰加

  1. 字節(jié)代換:AES的字符代換其實就是一個簡單的查表操作,AES定義了一個S盒和一個逆S盒。
  2. 行位移:就是一個簡單的左循環(huán)移位操作。
  3. 列混合:是通過矩陣相乘來實現(xiàn)的,經(jīng)過移位后的狀態(tài)矩陣與固定的矩陣相乘,得到混淆后的狀態(tài)矩陣。
  4. 輪密鑰加:是將128位輪密鑰Ki同狀態(tài)矩陣中的數(shù)據(jù)進行逐位異或操作。
AES加密算法
圖片來源于網(wǎng)絡

其中第1輪到第9輪的輪函數(shù)一樣,最后一輪迭代不執(zhí)行列混合,另外,在第一輪迭代之前,先將明文和原始密鑰進行一次異或加密操作。

解密過程仍為10輪,每一輪的操作是加密操作的逆操作。由于AES的4個輪操作都是可逆的,因此,解密操作的一輪就是順序執(zhí)行逆行移位、逆字節(jié)代換、輪密鑰加和逆列混合。同加密操作類似,最后一輪不執(zhí)行逆列混合,在第1輪解密之前,要執(zhí)行1次密鑰加操作。

免責聲明:素材源于網(wǎng)絡,如有侵權,請聯(lián)系刪稿。