OPENSSL库的使用-DES篇
一、单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);
}
OPENSSL库的使用-DES篇的更多相关文章
- DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项
DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...
- C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...
- 使用openssl库实现des,3des加密
原文地址: 使用openssl库实现des,3des加密 主要是调整了一下格式,以及一些变量的类型,以解决在VC2008下无法编译通过的问题. #include <stdio.h> #in ...
- 使用openssl库实现RSA、AES数据加密
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...
- [转]使用openssl库实现RSA、AES数据加密
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...
- RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例
前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密 私加 ===================== ...
- C++调用openssl库生成RSA加密秘钥对
直接上代码.默认生成的是pkcs#1格式 // ---- rsa非对称加解密 ---- // #define KEY_LENGTH 1024 // 密钥长度 #define PUB_KEY_FILE ...
- Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
前言 Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持.. OpenSSL 介绍 OpenSSL是一个开放源代码的软件库包,应用程序可 ...
- OpenSSL库验证PKCS7签名
使用Crypto库签名和验证签名请参考Crypto库实现PKCS7签名与签名验证,可以使用OpenSSL库验证Crypto签名,OpenSSL验证签名可使用简单的代码描述如下: //signature ...
随机推荐
- Python读取Excel数据并根据列名取值
一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...
- [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu)
原文 [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu) [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu) 周银辉 点击窗口左上角图标时弹出来的菜单也就是这里所说的系 ...
- Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer'
@Configuration public class HttpSessionConfig { @Bean public static ConfigureRedisAction configureRe ...
- __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )
root@xuanfei-desktop:~/cpropram/2# cat global.h //头文件#ifndef CLOBAL_H #define GLOBAL_H ...
- More Divisors(反素数)
More Divisors Time Limit: 2 Seconds Memory Limit: 65536 KB Everybody knows that we use decimal ...
- Cloud Foundry中warden的网络设计实现——iptable规则配置
在Cloud Foundry v2版本号中,该平台使用warden技术来实现用户应用实例执行的资源控制与隔离. 简要的介绍下warden,就是dea_ng假设须要执行用户应用实例(本文暂不考虑ward ...
- APUE学习笔记——10.15 sigsetjmp和siglongjmp
转载自:sigsetjmp使用方法 如侵犯您的权益,请联系:windeal12@qq.com sigsetjmp使用方法 分类: c/c++ linux2012-02-03 12:33 1252人阅读 ...
- Ubuntu14.04 Y460闪屏问题解决方案
我的笔记本是联想Y460,安装了Ubuntu之后发现屏幕闪烁移位,而且在使用IDE的时候出现无法输入中文等问题,其实是显卡驱动的问题,N卡官网给的驱动不好用,尝试使用大黄蜂 参考:https://wi ...
- createObjectURL方法 实现本地图片预览
ie6 可以直接显示本本地路径的图片 如: <img src="file://c:/3.jpg" /> ~~~网上都说ie7就不支持这种文件系统路径的url,但测试 ...
- 基于visual Studio2013解决算法导论之042单源最短路径
题目 单源最短路径 解决代码及点评 // 26单源最短路径bellmanford.cpp : 定义控制台应用程序的入口点. // #include <iostream> #incl ...