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

本文深入解析了DES_CBC加密模式的工作原理,包括数据块加密过程、IV向量的作用及常见填充方式如zeropadding、pkcs5padding和pkcs7padding。同时提供了C++调用openssl库实现DES_CBC加密解密的代码示例。

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

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

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

C++可调用openssl库实现DES加解密。但是openssl提供的接口只满足对一个数据块8个字节的加解密,实际使用,需要自己实现不同的填充方式。

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

因为工作中用到三种,下面对三种填充方式做简单讲解。  

一、zeropadding

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

  12345678        ----->> 12345678

       12345678 12345678  ----->> 12345678 12345678

       12345678 91           ----->>  12345678  91000000

  12345678 9123              ----->>12345678 91230000

二、pkcs5padding

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

  12345678        ----->> 12345678

       12345678 12345678  ----->>  12345678 12345678

       12345678 91           ----->>  12345678  91777777

  12345678 9123              ----->>  12345678  91234444

三、pkcs7padding

   同pkcs5padding

 

 

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

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

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

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

 

转载于:https://www.cnblogs.com/azbane/p/10179279.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值