DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项

DES cbc是基于数据块加密的。数据块的长度为8字节64bit。以数据块为单位循环加密,再拼接。每一个数据块加密的秘钥同样,IV向量不一样。第一个数据快所需的IV向量,须要咱们提供,从第二个数据块开始,所需的IV向量为上一个数据块生成的密文。html

IV向量该怎么赋值, 它跟秘钥KEY有什么关系,这一点,我暂时不清楚,若是您知道,请留言讲一下,很是感谢。我知道的是java里头调用库只传了一个KEY参数,工做经验认知是,java默认IV向量跟秘钥KEY是同样的值。java

DES加密的填充方式有多种,分别是 ansix92三、iso1012六、zeropadding、pkcs5padding、pkcs7padding。 那么cbc模式加密的填充方式也不例外。然而,解密的过程,只须要把密文分割成8字节一块,循环解密再作拼接。加密

C++可调用openssl库实现DES加解密。可是openssl提供的接口只知足对一个数据块8个字节的加解密,实际使用,须要本身实现不一样的填充方式。htm

openssl库加密的结果是不可识别的二进制字符串,须要转为可识别的十六进制或者Base64格式。blog

由于工做中用到三种,下面对三种填充方式作简单讲解。  接口

1、zeropaddingssl

  若是明文正好是8字节整数倍长度,则不需填充。若是明文不是8字节整数倍长度,则最后一部分,不足8字节,用0填充。字符串

  12345678        ----->> 12345678get

       12345678 12345678  ----->> 12345678 12345678openssl

       12345678 91           ----->>  12345678  91000000

  12345678 9123              ----->>12345678 91230000

2、pkcs5padding

      若是明文正好是8字节整数倍长度,则不需填充。若是明文不是8字节整数倍长度,则最后一部分,剩余m字节,差n=(8-m)字节,用n填充

  12345678        ----->> 12345678

       12345678 12345678  ----->>  12345678 12345678

       12345678 91           ----->>  12345678  91777777

  12345678 9123              ----->>  12345678  91234444

3、pkcs7padding

   同pkcs5padding

 

 

附1:C++调用openssl库实现的DES加密解密完整代码

附2:C++二进制字符串转十六进制字符串  C++十六进制字符串转二进制字符串

附3:C++二进制字符串转Base64字符串    C++Base64字符串转二进制字符串        C++base64格式和nonSafeBase64格式转换

附4:C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解

相关文章
相关标签/搜索