java与C++的DES加密与解密

DES(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。一般密码长度为8个字节,其中56位加密密钥,每个第8位都用作奇偶校验。

[b][color=orange]DES的几种工作方式[/color][/b]

[color=orange][u] 第一种电子密本方式(ECB)[/u][/color]
将明文分成n个64比特分组,如果明文长度不是64比特的倍数,则在明文末尾填充适当数目的规定符号。对明文组用给定的密钥分别进行加密,行密文C=(C0,C1,……,Cn-1)其中Ci=DES(K,xi),i=0,1,…..,n-1。

[color=orange][u]第二种密文分组链接方式(CBC)[/u][/color]
在CBC方式下,每个明文组xi在加密前与先一组密文按位模二加后,再送到DES加密,CBC方式克服了ECB方式报内组重的缺点,但由于明文组加密前与一组密文有关,因此前一组密文的错误会传播到下一组。

[color=orange][u]第三种密文反馈方式(CFB),可用于序列密码[/u][/color]
明文X=(x0,x1,……,xn-1),其中xi由t个比特组成0 第四种输出反馈方式(OFB),可用于序列密码
与CFB唯一不同的是OFB是直接取DES输出的t个比特,而不是取密文的t个比特,其余都与CFB相同。但它取的是DES的输出,所以它克服了CFB的密文错误传播的缺点

[color=orange][b]DES的几种填补方式[/b][/color]
DES是对64位数据的加密算法,如数据位数不足64位的倍数,需要填充,补充到64位的倍数。

[color=orange][u]NoPadding[/u][/color]
API或算法本身不对数据进行处理,加密数据由加密双方约定填补算法。例如若对字符串数据进行加解密,可以补充\0或者空格,然后trim

[color=orange][u]PKCS5Padding[/u][/color]
加密前:数据字节长度对8取余,余数为m,若m>0,则补足8-m个字节,字节数值为8-m,即差几个字节就补几个字节,字节数值即为补充的字节数,若为0则补充8个字节的8
解密后:取最后一个字节,值为m,则从数据尾部删除m个字节,剩余数据即为加密前的原文

[color=brown][u]SSL3Padding[/u][/color]
SSL3.0协议定义的填补算法


java默认的DES算法实现方式为DES/ECB/PKCS5Padding。若c++或其他语言与java进行加解密互通,若java采用默认实现,另一方工作方式和填补算法必须都是用ECB和PKCS5Padding。

你可能感兴趣的:(Java)