项目中有用到使用opensll des 对文件进行加密解密,发现加密解密后的文件长度不同,仔细看下算法发现,des加密需要补齐数据步骤。

des加密逻辑:DES算法函数接口  在OpenSSL中,DES算法的基本函数就是ECB操作模式对应的函数DES_ecb_encrypt()。该函数把一个8字节明文分组input加密成为一个8字节密文分组output。参数中密钥结构ks是用函数DES_set_key()准备好的,而密钥key是用随机数算法产生的64个随机比特。参数enc指示是加密还是解密。该函数每次只加密一个分组,如果长度不是8字节的倍数,则会被用0填充到8字节倍数。因此,输出可能比length长,而且必然是8字节的倍数。
des补齐方式:

  1. key补齐,基本就是超过8字节截取前8字节,不足8字节右补0x0
  2. 数据补齐。这里加解密需要统一padding方式(补齐方式),特别是设计第三方系统交互的时候。当初调试了很久就是因为第三方系统指定的补齐方式与规范定义的方式不一致。下面列举一下常用补齐方式。


  3.   pcks5/7 补齐,即待加密数据按8字节分组,最后一组不足8字数据按补位长度分别右补1-7个字节的相应数据(如补1个字节为0x01,补两个字节为0x02 0x02依次类推到七个字节补七个0x07)。特别注意当待加密数据为8字节整数倍时,需要最后补8字节的0x00