一、单DES算法ECB模式加解密

1、使用函数DES_set_key_unchecked设置密钥

2、使用函数DES_ecb_encrypt来进行数据加解密

void DES_ecb_encrypt(const_DES_cblock *input,DES_cblock *output,

DES_key_schedule *ks,int enc);

函数功能说明:DES ECB计算

参数说明:

input: 输入数据;(8字节长度)

output: 输出数据;(8字节长度)

ks: 密钥;

enc:加密:DES_ENCRYPT , 解密:DES_DECRYPT;

二、单DES算法CBC模式加解密

1、使用函数DES_set_key_unchecked设置密钥

2、使用函数DES_ncbc_encrypt来进行数据加解密

void DES_ncbc_encrypt(const unsigned char *input,unsigned char *output,

long length,DES_key_schedule *schedule,DES_cblock *ivec,

int enc);

参数说明:

input: 输入数据;(8字节长度)

output: 输出数据;(8字节长度)

length: 数据长度;(这里数据长度不包含初始化向量长度)

schedule:密钥;

ivec: 初始化向量;(一般为8个字节0)

enc:加密:DES_ENCRYPT , 解密:DES_DECRYPT;

三、T-DES算法ECB模式加解密

1、使用函数DES_set_key_unchecked设置密钥

2、使用函数DES_ecb3_encrypt来进行加解密

void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,

DES_key_schedule *ks1,DES_key_schedule *ks2,

DES_key_schedule *ks3, int enc);

函数说明:

3DES ECB算法

参数说明:

input: 输入数据

output: 输出数据

ks1,ks2,ks3, 3DES算法的三只密钥,实际应用中,大家更习惯于用两只密钥,调用此函数时,只需在ks3处传入ks1即可;

enc:加密:DES_ENCRYPT , 解密:DES_DECRYPT

四、T-DES算法CBC模式加解密

1、使用函数DES_set_key_unchecked设置密钥

2、使用函数DES_ede3_cbc_encrypt来进行加解密

void DES_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output,

long length,

DES_key_schedule *ks1,DES_key_schedule *ks2,

DES_key_schedule *ks3,DES_cblock *ivec,int enc);

函数功能说明:

3DES CBC模式计算;

参数说明:

input: 输入数据;(8字节长度)

output: 输出数据;(8字节长度)

length: 长度;(这里数据长度不包含初始化向量长度)

ks1:密钥1;(为16字节密钥的左边8字节)

ks2:密钥2;(为16字节密钥的右边8字节)

ks3:密钥3;(为16字节密钥的左边8字节)

ivec:初始化向量;;(一般为8个字节0)

enc:DES_ENCRYPT , 解密:DES_DECRYPT;

五、示例代码

void CPage1::OnButtonEncrypt()

{

// TODO: Add your control notification handler code here

DES_cblock key;

unsigned char key_hex[256] = {0};

unsigned char data_hex[256] = {0};

unsigned char initval_hex[256] = {0};

unsigned char temp[256] = {0};

int i = 0;

int keylen = 0;

int datalen = 0;

int InitialLen = 0;

DES_key_schedule schedule;

DES_key_schedule schedule2;

DES_key_schedule schedule3;

const_DES_cblock input;

DES_cblock output;

DES_cblock ivec;

UpdateData(TRUE);

m_key.Remove(' ');

m_data.Remove(' ');

m_initval.Remove(' ');

keylen = m_key.GetLength()/2;

datalen = m_data.GetLength()/2;

InitialLen = m_initval.GetLength()/2;

if (keylen%8!=0)

{

AfxMessageBox("输入密钥长度不是8的整数倍,请重新输入!");

return;

}

if (datalen%8!=0)

{

AfxMessageBox("输入数据长度不是8的整数倍,请重新输入!");

return;

}

StrToHex(m_key,key_hex,keylen);

StrToHex(m_data,data_hex,datalen);

StrToHex(m_initval,initval_hex,InitialLen);

//单DES密钥设置

if (keylen == 8)

{

memcpy(key,key_hex,keylen);

DES_set_key_unchecked(&key, &schedule);

}

//三DES密钥设置

else if (keylen == 16)

{

memcpy(key,key_hex,8);

DES_set_key_unchecked(&key, &schedule);

memcpy(key,key_hex+8,8);

DES_set_key_unchecked(&key, &schedule2);

memcpy(key,key_hex,8);

DES_set_key_unchecked(&key, &schedule3);

}

memcpy(ivec,initval_hex,InitialLen);

//单DES算法

if (keylen == 8)

{

//ECB模式

if (((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck())

{

for(i = 0;i < datalen/8;i++)

{

memcpy(input,data_hex+i*8,8);

DES_ecb_encrypt(&input, &output, &schedule, DES_ENCRYPT);

memcpy(temp+i*8,output,8);

}

}

//CBC模式

else if (((CButton*)GetDlgItem(IDC_RADIO2))->GetCheck())

{

for(i = 0;i < datalen/8;i++)

{

DES_ncbc_encrypt(data_hex+i*8, temp+i*8,8,&schedule,&ivec, DES_ENCRYPT);

}

}

}

//TDES算法

else if (keylen == 16)

{

//ECB模式

if (((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck())

{

for (i = 0;i < datalen/8;i++)

{

memcpy(input,data_hex+i*8,8);

DES_ecb3_encrypt(&input, &output, &schedule, &schedule2, &schedule3, DES_ENCRYPT);

memcpy(temp+i*8,output,8);

}

}

//CBC模式

else if (((CButton*)GetDlgItem(IDC_RADIO2))->GetCheck())

{

for(i = 0;i < datalen/8;i++)

{

DES_ede3_cbc_encrypt(data_hex+i*8, temp+i*8,8,&schedule, &schedule2, &schedule3,&ivec, DES_ENCRYPT);

}

}

}

HexToStr(temp,datalen,m_result);

UpdateData(FALSE);

}

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

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

C&plus;&plus; 使用openssl库实现 DES 加密——CBC模式 &amp&semi;&amp&semi; RSA加密——公加私解——私加公解

之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...

使用openssl库实现des&comma;3des加密

openssl java des_OPENSSL库的使用-DES篇相关推荐

  1. OPENSSL库的使用-DES篇

    OPENSSL库的使用-DES篇 1 DES算法简介 1.1 DES算法介绍 1.2 工作模式 1)ECB模式 2)CBC模式 3DES 算法 2 单DES算法ECB模式加解密 2.1 使用函数DES ...

  2. java pem 私钥_将PEM导入Java密钥库

    在我的情况下,我有一个pem文件,其中包含两个证书和一个用于相互SSL身份验证的加密私钥.所以我的pem文件看起来像这样: -----BEGIN CERTIFICATE----- ... -----E ...

  3. Java 面试知识点解析(七)——Web篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  4. java gradle构建_在Gradle中为JPMS构建Java 6-8库

    java gradle构建 通过提供Java 9 module-info.class了解如何使用Gradle构建支持JPMS( Java平台模块系统 )的Java 6-8库. 介绍 如果您需要JPMS ...

  5. 在Gradle中为JPMS构建Java 6-8库

    通过提供Java 9 module-info.class来了解如何使用Gradle构建支持JPMS( Java平台模块系统 )的Java 6-8库. 介绍 如果您需要JPMS本身的介绍,请查看此概述 ...

  6. ios 编译ffmpeg 支持 x264 fdk-aac openssl 并裁剪库大小

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2018-10-11更新 android平台编译 右转 新的报错信息 ./lib ...

  7. Java 面试题大全(一篇足以,建议收藏)

    Java 面试题大全 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.final 在 java 中有什么作用? 4.java 中的 Math.round(-1.5 ...

  8. java微服务开发(基础环境篇)

    java微服务开发(基础环境篇) 我们的目标是~~_浩瀚的宇宙 _~~全栈开发 俗话说的好 _工欲善其事 必先利其器 _对于一个开发者来说 一个好的开发环境可以带来的收益是巨大的 本篇的重点主要是li ...

  9. 视频教程-Java学习指南(Swing高级篇)-Java

    Java学习指南(Swing高级篇) 邵发,清华大学毕业,从业软件开发十余年,自2015年起致力于C/C++/Java等基础教育领域,希望能通过提高每一个个体的素质来推动中国IT业的整体发展.代表作: ...

最新文章

  1. android 实现 下拉筛选的效果
  2. ceph nautilus相对于minic的主要改动
  3. linux安装python3命令-linux系统下安装python3及其配置
  4. 深度学习未来的三种方式
  5. 海生《我不是你的玩偶》关注颇高
  6. 爬虫学习笔记(十)—— Scrapy框架(五):下载中间件、用户/IP代理池、settings文件
  7. MFC中SendMessage的用法与相应函数的添加
  8. struts2中s:select标签在freemarker中的使用
  9. mysql慢日志管理
  10. web项目下的web.xml listener监听总结
  11. MySQL当查询的时候有多个结果,但需要返回一条的情况用GROUP_CONCAT拼接
  12. matlabpython建模_参加数学建模用 MATLAB,还是 Python?
  13. Java的三大基本特征及其特点
  14. 计算机病毒属于源程序吗,计算机病毒是否是源程序吗
  15. 一个完美网站的101项指标.第二部分.内容为王
  16. 技能证里的天花板-阿里云云计算架构师ACE认证将全面升级!
  17. iPhoneX、iPhoneXS、iPhoneXR、iPhoneXSMax屏幕适配
  18. 用Python爬虫爬取链家网上的房源信息
  19. matlab三维立体图
  20. 瑞数5维普期刊js逆向

热门文章

  1. 计算机二级Python真题(十)
  2. 用这个工具,让人抓狂的领导驾驶舱报表五步搞定
  3. 实用软件工程课后答案 (张海潘 吕云翔)
  4. 《数据结构与抽象:Java语言描述(原书第4版)》一2.1.7 删除项的方法
  5. 美多商场之图形验证码
  6. 100块钱买100只鸡的故事
  7. 用普通话软件测试为什么分数都很低,有没有练习普通话的软件?练习普通话软件推荐...
  8. bat 输入密码_不记得密码了?教你查看设备保存的账号密码,绝对干货
  9. 手机sar值_你的手机SAR值是多少? 带你了解手机辐射影响究竟有多大
  10. mapbox-gl绘制经纬网格(Graticule)