淺析AES加密技術(shù)及其應(yīng)用

AES最一種常見(jiàn)的對(duì)稱加密算法,對(duì)稱加密算法也就是加密和解密用相同的密鑰。加密流程如下:
淺析AES加密技術(shù)及其應(yīng)用

明文P:沒(méi)有經(jīng)過(guò)加密的數(shù)據(jù)。

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

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

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

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

AES的應(yīng)用
語(yǔ)言:java
jdk版本:1.7
算法:AES
密鑰長(zhǎng)度:32?,也就是AES-256
AES為分組密碼,分組密碼也就是把明文分成一組一組的,每組長(zhǎng)度相等,每次加密一組數(shù)據(jù),直到加密完整個(gè)明文。在AES標(biāo)準(zhǔn)規(guī)范中,密鑰的長(zhǎng)度可以使用128位、192位、256位。(每個(gè)字節(jié)8位)

加密模式:ECB
電碼本模式,這種模式是將整個(gè)明文分成若干段相同的小段,然后對(duì)每一小段進(jìn)行加密。

填充模式:PKCS7Padding
在分組加密算法中,我們首先要將原文進(jìn)行分組,然后每個(gè)分組進(jìn)行加密,然后組裝密文。
假設(shè)我們現(xiàn)在的數(shù)據(jù)長(zhǎng)度是24字節(jié),BlockSize是8字節(jié),那么很容易分成3組,一組8字節(jié);
因?yàn)榧用芩惴ǖ男枨螅魑淖止?jié)必須按照block進(jìn)行填充對(duì)齊,才能方便進(jìn)行加密運(yùn)算。

加密結(jié)果編碼方式:Base64

環(huán)境準(zhǔn)備
JAVA實(shí)現(xiàn)“AES/ECB/PKCS7Padding”對(duì)稱加解密,尤其是?AES256的加解密需要注意兩點(diǎn):
1、技術(shù)出口限制,國(guó)內(nèi)的JDK 默認(rèn)不支持;
2、PKCS7Padding?JAVA默認(rèn)不支持PKCS7Padding填充模式,需借助第三方提供者。

JAVA代碼:
淺析AES加密技術(shù)及其應(yīng)用
淺析AES加密技術(shù)及其應(yīng)用

輸出結(jié)果:
淺析AES加密技術(shù)及其應(yīng)用