詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)

對(duì)稱密碼算法是當(dāng)今應(yīng)用范圍最廣,使用頻率最高的加密算法。它不僅應(yīng)用于軟件行業(yè),在硬件行業(yè)同樣流行。各種基礎(chǔ)設(shè)施凡是涉及到安全需求,都會(huì)優(yōu)先考慮對(duì)稱加密算法。對(duì)稱密碼算法的加密密鑰和解密密鑰相同,對(duì)于大多數(shù)對(duì)稱密碼算法,加解密過程互逆。

(1)加解密通信模型

詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)

(2)特點(diǎn):算法公開、計(jì)算量小、加密速度快、加密效率高。
(3)弱點(diǎn):雙方都使用同樣密鑰,安全性得不到保證。

對(duì)稱密碼有流密碼和分組密碼兩種,但是現(xiàn)在普遍使用的是分組密碼:
(4)分組密碼工作模式
ECB:電子密碼本(最常用的,每次加密均產(chǎn)生獨(dú)立的密文分組,并且對(duì)其他的密文分組不會(huì)產(chǎn)生影響,也就是相同的明文加密后產(chǎn)生相同的密文)
CBC:密文鏈接(常用的,明文加密前需要先和前面的密文進(jìn)行異或運(yùn)算,也就是相同的明文加密后產(chǎn)生不同的密文)
CFB:密文反饋
OFB:輸出反饋
CTR:計(jì)數(shù)器

常用對(duì)稱密碼:
DES(Data Encryption Standard,數(shù)據(jù)加密標(biāo)準(zhǔn))
3DES(Triple DES、DESede,進(jìn)行了三重DES加密的算法)
AES(Advanced Encryption Standard,高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn),AES算法可以有效抵制針對(duì)DES的攻擊算法)

先來看一下這三種算法的簡(jiǎn)單對(duì)比:
詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)

下面我們看如何使用 DES / 3DES / AES 三種算法實(shí)現(xiàn) 對(duì)稱加密:
DES算法
DES:數(shù)據(jù)加密標(biāo)準(zhǔn),是對(duì)稱加密算法領(lǐng)域中的典型算法
特點(diǎn):密鑰偏短(56位)、生命周期短(避免被破解)
Java實(shí)現(xiàn)
1)生成密鑰
詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)
2)加密
詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)
3)解密
詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)

我們可以發(fā)現(xiàn),加密解密我們只是設(shè)置了不同的模式而已。

3DES算法
3DES:將密鑰長(zhǎng)度增至112位或168位,通過增加迭代次數(shù)提高安全性
缺點(diǎn):處理速度較慢、密鑰計(jì)算時(shí)間較長(zhǎng)、加密效率不高
Java實(shí)現(xiàn)
1)生成密鑰

詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)
2)3DES加密

詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)
3)3DES解密

詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)

AES算法(推薦使用)
AES:高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn),能夠有效抵御已知的針對(duì)DES算法的所有攻擊
特點(diǎn):密鑰建立時(shí)間短、靈敏性好、內(nèi)存需求低、安全性高
Java實(shí)現(xiàn)
1)生成密鑰

詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)
2)AES加密

詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)
3)AES解密

詳解DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)