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

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

   DES的几种工作方式

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

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

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

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

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

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

   SSL3Padding
   SSL3.0协议定义的填补算法


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

转自: java与C++的DES加密与解密

你可能感兴趣的:(java,C++,c,算法,C#)