裴宏韜 孫建言 蓋紅玉 李穩(wěn)
摘要:對(duì)稱密碼算法是當(dāng)今應(yīng)用范圍最廣,使用頻率最高的加密算法。它不僅應(yīng)用于軟件行業(yè),在硬件行業(yè)同樣流行。各種基礎(chǔ)設(shè)施凡是涉及安全需求,都會(huì)優(yōu)先考慮對(duì)稱加密算法。
關(guān)鍵詞:對(duì)稱加密算法;DES;3DES;AES
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)18-0046-02
1概述
隨著數(shù)據(jù)加密技術(shù)的發(fā)展,現(xiàn)代密碼技術(shù)主要分為對(duì)稱加密技術(shù)和非對(duì)稱加密技術(shù)。如果在一個(gè)密碼體系中,加密密鑰和解密密鑰相同,就稱為對(duì)稱密鑰?,F(xiàn)代加密技術(shù)階段,加密和解密算法是公開的,數(shù)據(jù)的安全性完全取決于密鑰的安全性,因此,對(duì)稱加密體系中如果密鑰丟失,數(shù)據(jù)將不再安全。
2對(duì)稱式加密算法簡(jiǎn)述
2.1代表性算法
1)DES
DES(Data EncryptionStandard,數(shù)據(jù)加密標(biāo)準(zhǔn))是美國(guó)國(guó)家標(biāo)準(zhǔn)局研究的除國(guó)防部以外的其他部門的計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn)。DES是一種單密鑰密碼算法,它是一種典型的按分組方式工作的密碼,是兩種基本密碼塊替代和換位的細(xì)致而復(fù)雜的結(jié)構(gòu),通過反復(fù)一次應(yīng)用這兩項(xiàng)技術(shù)來提高起強(qiáng)度,經(jīng)過總共16輪的替換和換位變換后,使得密碼分析者無法獲得該算法的一般特性以外的更多的信息。
算法思想:DES算法將輸入的明文分為64位的數(shù)據(jù)分組,使用64位密鑰進(jìn)行變化,每個(gè)64為明文分組數(shù)據(jù)經(jīng)過初始置換、16次迭代和逆初始置換的3個(gè)主要階段,最后輸出得到64為密文。
2)三重DES
DES算法現(xiàn)在難以提供足夠的安全性,因其有效密鑰只有56位。后來又提出了三重DES(或稱3DES),該方法的強(qiáng)度大約和112比特的密鑰強(qiáng)度相當(dāng)。這種方法用兩個(gè)密鑰對(duì)明文進(jìn)行3次運(yùn)算。
3)AES
高級(jí)加密標(biāo)準(zhǔn)(英語(yǔ):Advanced Encryption Standard,縮寫:AES),在密碼學(xué)中又稱Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。AES匯聚了高安全性、高性能、高效率、易用和靈活等優(yōu)點(diǎn),它設(shè)計(jì)思想簡(jiǎn)單,并兼顧了速度和代碼大小以適應(yīng)各種平臺(tái)的需求。AES設(shè)計(jì)有三種密鑰長(zhǎng)度,相比較而言,AES的128位密鑰比DES的58位密鑰要強(qiáng)得多。
2.2算法比較
對(duì)稱密碼算法的加密密鑰和解密密鑰相同,對(duì)于大多數(shù)對(duì)稱密碼算法,加解密過程互逆。
1)加解密通信模型,如圖1所示。
2)特點(diǎn):算法公開、計(jì)算量小、加密速度快、加密效率高。
3)弱點(diǎn):雙方都使用同樣密鑰,安全性得不到保證。
對(duì)稱密碼有流密碼和分組密碼兩種,但是現(xiàn)在普遍使用的是分組密碼:
4)分組密碼工作模式
(1)ECB:電子密碼本(最常用的,每次加密均產(chǎn)生獨(dú)立的密文分組,并且對(duì)其他的密文分組不會(huì)產(chǎn)生影響,也就是相同的明文加密后產(chǎn)生相同的密文)。
(2)CBC:密文鏈接(常用的,明文加密前需要先和前面的密文進(jìn)行異或運(yùn)算,也就是相同的明文加密后產(chǎn)生不同的密文)。
除了這兩種常用的工作模式,還有:
(3)CFB:密文反饋。
(4)OFB:輸出反饋。
f5)CTR:計(jì)數(shù)器。
這五種工作模式主要是密碼學(xué)中算法在進(jìn)行推導(dǎo)演算的時(shí)候所應(yīng)用到的。
5)分組密碼填充方式
(1)NoPadding:無填充。
(2)PKCS5Padding:填充的原則是,如果長(zhǎng)度少于16個(gè)字節(jié),需要補(bǔ)滿16個(gè)字節(jié),補(bǔ)(16-len)個(gè)(16-len)例如:huguozhen這個(gè)節(jié)符串是9個(gè)字節(jié),16-9=7,補(bǔ)滿后如:huguozhen+7個(gè)十進(jìn)制的7。如果字符串長(zhǎng)度正好是16字節(jié),則需要再補(bǔ)16個(gè)字節(jié)的十進(jìn)制的16。在PKCS5Padding中,明確定義Block的大小是8位。
(3)ISO10126Padding。
三種常用的對(duì)稱密碼的填充方式如表1所示。
3算法的Java實(shí)現(xiàn)
3.1 DES算法
(1)生成密鑰:
KeyGenerator keyGen=KeyGenerator.getlnstance("DES");∥密鑰生成器
keyGen.init(56);∥初始化密鑰生成器
SecretKey secretKey=keyGen.generateKey0;∥生成密鑰
byte[]key=secretKey.getEncoded();∥密鑰字節(jié)數(shù)組
f21DES加密:
SecretKey secretKey=new SecretKeySpec(key,"DES");∥恢復(fù)密鑰
Cipher cipher=Cipher.getInstance("DES");∥Cipher完成加密或解密工作類
cipher.init(Cipher.ENCRYPT_MODE,secretKey);∥對(duì)Cipher初始化,加密模式
bytel[]cipherByte=cipher.doFinal(data);∥加密data
(3)DES解密:
SecretKey secretKey=new SecretKeySpec(key,"DES");∥恢復(fù)密鑰
Cipher cipher=Cipher.getlnstance("DES");HCipher完成加密或解密工作類
cipher.init(Cipher.DECRYPT_MODE,secretKey);∥對(duì) Cipher初始化,解密模式
byte[]cipherByte=cipher.doFinal(data);∥解密data
3.2 AlES算法實(shí)現(xiàn)
AES算法是高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn),能夠有效抵御已知的針對(duì)DES算法的所有攻擊。密鑰建立時(shí)間短、靈敏性好、內(nèi)存需求低、安全性高。推薦使用。
1)生成密鑰:
KeyGenerator keyGen=KeyGenerator.getInstance("AES");∥密鑰生成器
keygen.init(128);∥默認(rèn)128,獲得無政策權(quán)限后可為192或256
SecretKey secretKey=keyGen.generateKey();∥生成密鑰
byte[]key=secretKey.getEncoded0();∥密鑰字節(jié)數(shù)組
2)AES加密:
SecretKey secretKey=new SecretKeySpec(key,"AES");∥恢復(fù)密鑰
Cipher cipher=Cipher.getlnstance("AES");∥Cipher完成加密或解密工作類
cipher.init(Cipher.ENCRYPT_MODE,secretKey);∥對(duì)Cipher初始化,解密模式
byte[]cipherByte=cipher.doFinal(data);∥加密data
3)AES解密:
SecretKey secretKey=new SecretKeySpec(key,"AES");∥恢復(fù)密鑰
Cipher cipher=Cipher.getInstance("AES");∥Cipher完成加密或解密工作類
cipher.init(Cipher.DECRYPT_MODE,secretKey);∥對(duì) Cipher初始化,解密模式
byte[]cipherByte=cipher.doFinal(data);∥解密data
4結(jié)束語(yǔ)
對(duì)稱加密算法在密碼學(xué)中有重要的意義,在保密實(shí)踐中具有非常重要的實(shí)際意義,目前仍然是密碼學(xué)研究的重點(diǎn)。endprint