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加密——公加私解——私加公解

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

  1. javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通

    我们只知道不同的语言解密要相互通用,就需要遵循相同的加密方式,然而在具体做技术预研的时候,就发现会遇到很多问题,网上找的资料也是比较片面,所以我踩了坑,并且把解决方案和相关资料源码提供出来,给需要的朋 ...

  2. C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式

    ============================================== des   cbc  加密 zeropadding填充方式 ======================= ...

  3. DES加解密算法Qt实现

      算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...

  4. Java Des加解密方法(c#加密Java解密)

    最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录.这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java ...

  5. PHP 基础篇 - PHP 中 DES 加解密详解

    一.简介 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略.所谓对 ...

  6. java和erlang之间的DES加解密

    app登录,登录的密码要用DES加密,服务器是用erlang,客户端要同时支持多平台(Android.iOS).首先,Java端的DES加密的实现方式, 少说废话了,直接上代码,如下: public ...

  7. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...

  8. Node.js的DES加解密和MD5加密

    最基本的就是经常用的md5加密算法 代码如下 var  MD5=function (data) {        var _encrymd5 = require('crypto').createHas ...

  9. JavaScript与C#互通的DES加解密算法

    原文地址:传送门 本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DE ...

随机推荐

  1. [No0000192]Vim打开和保存文件-Vim使用技巧(7)

    使用Vim打开和保存文件是最常用的操作,介绍使用edit命令通过文件路径来打开文件,使用write命令保存文件,当文件路径不存在或用户权限不匹配时,使用write命令调用外部shell程序完成操作. ...

  2. SQL Fundamentals || Oracle SQL语言

    对于SQL语言,有两个组成部分: DML(data manipulation language) 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据 ...

  3. Matlab 快捷键 命令

    1. 在命令窗口(Command Window)中: 1) [上.下键]――切换到之前.之后的命令,可以重复按多次来达到你想要的命令 2) clc――清除命令窗口显示的语句,此命令并不清空当前工作区的 ...

  4. liteide 去除go程序cmd窗口

    http://blog.csdn.net/aqtata/article/details/53389261

  5. 陌生的 metaclass(转)

    add by zhj:这是我见过的对metaclass解释最清楚的文章了,例子很好,真是一例胜千言 原文:http://wiki.jikexueyuan.com/project/explore-pyt ...

  6. linux里source、sh、bash、./有什么区别(转)

    add by zhj: 主要不同是,source是在当前shell中执行脚本,而sh, bash, ./是在当前shell的child shell中执行脚本 原文:http://www.cnblogs ...

  7. oracle中in和exists的区别

    IN适合于外表大而内表小的情况:EXISTS适合于外表小而内表大的情况. 性能上的比较 比如Select * from T1 where x in ( select y from T2 ) 执行的过程 ...

  8. 10.8-uC/OS-III内部任务(中断处理任务 OS_IntQTask())

    1.当设置OS_CFG.H中的OS_CFG_ISR_POST_DEFERRED_EN为1时, uC/OS-III就会创建一个任务,它的作用是尽快完成ISR中对post函数的调用, 将信号量.消息等对象 ...

  9. linux 查看系统负载:uptime

    uptime命令用于查看系统负载,跟 w 命令的输出内容一致 [root@mysql ~]# uptime :: up days, :, user, load average: 1.12, 0.97, ...

  10. 【环境配置】配置jdk

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/manoel/article/details/37736569 1. 下载jdk的安装文件 http: ...