DES(Data Encryption Standard)算法,于1977年得到美國(guó)政府的正式許可,是一種用56位密鑰來(lái)加密64位數(shù)據(jù)的方法。一般密碼長(zhǎng)度為8個(gè)字節(jié),其中56位加密密鑰,每個(gè)第8位都用作奇偶校驗(yàn)。
DES的幾種工作方式
第一種電子密本方式(ECB)
將明文分成n個(gè)64比特分組,如果明文長(zhǎng)度不是64比特的倍數(shù),則在明文末尾填充適當(dāng)數(shù)目的規(guī)定符號(hào)。對(duì)明文組用給定的密鑰分別進(jìn)行加密,行密文C=(C0,C1,……,Cn-1)其中Ci=DES(K,xi),i=0,1,…..,n-1。
第二種密文分組鏈接方式(CBC)
在CBC方式下,每個(gè)明文組xi在加密前與先一組密文按位模二加后,再送到DES加密,CBC方式克服了ECB方式報(bào)內(nèi)組重的缺點(diǎn),但由于明文組加密前與一組密文有關(guān),因此前一組密文的錯(cuò)誤會(huì)傳播到下一組。
第三種密文反饋方式(CFB),可用于序列密碼
明文X=(x0,x1,……,xn-1),其中xi由t個(gè)比特組成0 第四種輸出反饋方式(OFB),可用于序列密碼
與CFB唯一不同的是OFB是直接取DES輸出的t個(gè)比特,而不是取密文的t個(gè)比特,其余都與CFB相同。但它取的是DES的輸出,所以它克服了CFB的密文錯(cuò)誤傳播的缺點(diǎn)
DES的幾種填補(bǔ)方式
DES是對(duì)64位數(shù)據(jù)的加密算法,如數(shù)據(jù)位數(shù)不足64位的倍數(shù),需要填充,補(bǔ)充到64位的倍數(shù)。
NoPadding
API或算法本身不對(duì)數(shù)據(jù)進(jìn)行處理,加密數(shù)據(jù)由加密雙方約定填補(bǔ)算法。例如若對(duì)字符串?dāng)?shù)據(jù)進(jìn)行加解密,可以補(bǔ)充\0或者空格,然后trim
PKCS5Padding
加密前:數(shù)據(jù)字節(jié)長(zhǎng)度對(duì)8取余,余數(shù)為m,若m>0,則補(bǔ)足8-m個(gè)字節(jié),字節(jié)數(shù)值為8-m,即差幾個(gè)字節(jié)就補(bǔ)幾個(gè)字節(jié),字節(jié)數(shù)值即為補(bǔ)充的字節(jié)數(shù),若為0則補(bǔ)充8個(gè)字節(jié)的8
解密后:取最后一個(gè)字節(jié),值為m,則從數(shù)據(jù)尾部刪除m個(gè)字節(jié),剩余數(shù)據(jù)即為加密前的原文
SSL3Padding
SSL3.0協(xié)議定義的填補(bǔ)算法
java默認(rèn)的DES算法實(shí)現(xiàn)方式為DES/ECB/PKCS5Padding。若c++或其他語(yǔ)言與java進(jìn)行加解密互通,若java采用默認(rèn)實(shí)現(xiàn),另一方工作方式和填補(bǔ)算法必須都是用ECB和PKCS5Padding。
已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論
ITeye推薦
DES的幾種工作方式
第一種電子密本方式(ECB)
將明文分成n個(gè)64比特分組,如果明文長(zhǎng)度不是64比特的倍數(shù),則在明文末尾填充適當(dāng)數(shù)目的規(guī)定符號(hào)。對(duì)明文組用給定的密鑰分別進(jìn)行加密,行密文C=(C0,C1,……,Cn-1)其中Ci=DES(K,xi),i=0,1,…..,n-1。
第二種密文分組鏈接方式(CBC)
在CBC方式下,每個(gè)明文組xi在加密前與先一組密文按位模二加后,再送到DES加密,CBC方式克服了ECB方式報(bào)內(nèi)組重的缺點(diǎn),但由于明文組加密前與一組密文有關(guān),因此前一組密文的錯(cuò)誤會(huì)傳播到下一組。
第三種密文反饋方式(CFB),可用于序列密碼
明文X=(x0,x1,……,xn-1),其中xi由t個(gè)比特組成0 第四種輸出反饋方式(OFB),可用于序列密碼
與CFB唯一不同的是OFB是直接取DES輸出的t個(gè)比特,而不是取密文的t個(gè)比特,其余都與CFB相同。但它取的是DES的輸出,所以它克服了CFB的密文錯(cuò)誤傳播的缺點(diǎn)
DES的幾種填補(bǔ)方式
DES是對(duì)64位數(shù)據(jù)的加密算法,如數(shù)據(jù)位數(shù)不足64位的倍數(shù),需要填充,補(bǔ)充到64位的倍數(shù)。
NoPadding
API或算法本身不對(duì)數(shù)據(jù)進(jìn)行處理,加密數(shù)據(jù)由加密雙方約定填補(bǔ)算法。例如若對(duì)字符串?dāng)?shù)據(jù)進(jìn)行加解密,可以補(bǔ)充\0或者空格,然后trim
PKCS5Padding
加密前:數(shù)據(jù)字節(jié)長(zhǎng)度對(duì)8取余,余數(shù)為m,若m>0,則補(bǔ)足8-m個(gè)字節(jié),字節(jié)數(shù)值為8-m,即差幾個(gè)字節(jié)就補(bǔ)幾個(gè)字節(jié),字節(jié)數(shù)值即為補(bǔ)充的字節(jié)數(shù),若為0則補(bǔ)充8個(gè)字節(jié)的8
解密后:取最后一個(gè)字節(jié),值為m,則從數(shù)據(jù)尾部刪除m個(gè)字節(jié),剩余數(shù)據(jù)即為加密前的原文
SSL3Padding
SSL3.0協(xié)議定義的填補(bǔ)算法
java默認(rèn)的DES算法實(shí)現(xiàn)方式為DES/ECB/PKCS5Padding。若c++或其他語(yǔ)言與java進(jìn)行加解密互通,若java采用默認(rèn)實(shí)現(xiàn),另一方工作方式和填補(bǔ)算法必須都是用ECB和PKCS5Padding。
已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論
ITeye推薦