DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项
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库来实现的注意事项的更多相关文章
- javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通
我们只知道不同的语言解密要相互通用,就需要遵循相同的加密方式,然而在具体做技术预研的时候,就发现会遇到很多问题,网上找的资料也是比较片面,所以我踩了坑,并且把解决方案和相关资料源码提供出来,给需要的朋 ...
- C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式
============================================== des cbc 加密 zeropadding填充方式 ======================= ...
- DES加解密算法Qt实现
算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...
- Java Des加解密方法(c#加密Java解密)
最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录.这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java ...
- PHP 基础篇 - PHP 中 DES 加解密详解
一.简介 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略.所谓对 ...
- java和erlang之间的DES加解密
app登录,登录的密码要用DES加密,服务器是用erlang,客户端要同时支持多平台(Android.iOS).首先,Java端的DES加密的实现方式, 少说废话了,直接上代码,如下: public ...
- 一个java的DES加解密类转换成C#
原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...
- Node.js的DES加解密和MD5加密
最基本的就是经常用的md5加密算法 代码如下 var MD5=function (data) { var _encrymd5 = require('crypto').createHas ...
- JavaScript与C#互通的DES加解密算法
原文地址:传送门 本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DE ...
随机推荐
- [No000016F]高并发下线程安全的单例模式(最全最经典)
在所有的设计模式中,单例模式是我们在项目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单 ...
- JavaScript面向对象之创建类和方法
一,js使用函数来定义类而不是像别的编程语言一样通过关键字class来定义,通过类本身(this)和原型(prototype)来完成面对对象编程! 示例1, //创建ElectronicSignatu ...
- 2012年蓝桥杯省赛A组c++第2题(暴力求解古堡算式)
/* 古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!” 于是, ...
- 2015年蓝桥杯省赛A组c++第1题
/* 方程: a^2 + b^2 + c^2 = 1000 这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解. 你能算出另一组合适的解吗? 请填写该解中最小的数字. 注意:你提交的应该是一 ...
- 【python基础】hmac
[微语]不应当急于求成,应当去熟悉自己的研究对象,锲而不舍,时间会成全一切.凡事开始最难:然而最难的是何以善终 通过哈希算法,我们可以验证一段数据是否有效,方法就是对比该数据的哈希值,例如,判断用户口 ...
- 20170915 shell
1.什么是Shell 一种电脑程序与文本文件,利用Shell 可以进行系统管理,文件操作等. 2.认识bash 这个Shell 由于管理整个计算机硬件的其实是操作系统的内核(kernel),用户一般都 ...
- 前端框架之Vue(7)-事件处理
监听事件 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码. 示例: <div id="example-1"> <butt ...
- Repository mirror 解析
1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...
- 设置 matlab 画图格式
1:设置 matlab 画图格式 clear;clc; % load("array.mat"); % Bestallarray=array; % rllofcircle(Besta ...
- Java 基础 引用数据类型 ArrayList集合
引用数据类型(类) 分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类. 我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类, ...