linux c ecb 加密解密,OpenSSL对数组加密解密的完整实现代码
本例是用C实现的对一个数组进行加密,加密到第二个数组,然后解密到另一个数组的完整实现代码。
#include
#include
#include "openssl/evp.h"
#include "openssl/x509.h"
static void disp(void * pbuf,int size)
{ int i=0;
for( i=0;i
printf("%02x ",*((unsigned char *)pbuf+i));
putchar('\n');
}
/*
* key:加密密钥,一般设置位24,不知为啥
* iv:加密初始向量
* in_enc:明文数组,输入数组
* out_enc:加密后的数组,输出密文数组
* in_len:明文长度
* out_len:密文长度
* */
//加密函数
int EncryptBuffer(unsigned char * key,unsigned char *iv,unsigned char * in_enc, unsigned char *out_enc,int in_len,int *out_len)
{
;
int outl; //第一次使用update加密的数据长度
int outl2; //剩余的字段,经过final填充后的长度
int inl;
int rv;
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx); //初始化ctx
rv = EVP_EncryptInit_ex(&ctx,EVP_des_ede3_ecb(),NULL,key,iv); //设置密码算法、key和iv
if(rv != 1)
{
printf("Err\n");
return -1;
}
inl=in_len;
rv = EVP_EncryptUpdate(&ctx,out_enc,&outl,in_enc,in_len);//加密
if(rv != 1)
{
printf("Err\n");
return -1;
}
//加密结束
rv = EVP_EncryptFinal_ex(&ctx,out_enc+outl,&outl2);
if(rv != 1)
{
EVP_CIPHER_CTX_cleanup(&ctx);
return -1;
}
*out_len=outl+outl2;
EVP_CIPHER_CTX_cleanup(&ctx); //清除EVP加密上下文环境
printf("加密已完成\n");
}
/*
* key:加密密钥,一般设置位24,不知为啥
* iv:加密初始向量
* in_dec:密文数组,输入数组
* out_dec:解密后的数组,输出数组
* in_len:密文长度
* out_len:明文长度
* */
//解密函数
int DecryptBuffer(unsigned char * key,unsigned char *iv,unsigned char * in_dec, unsigned char *out_dec,int in_len,int *out_len)
{
int outl; //第一次使用update解密的数据长度
int outl2; //剩余的字段,经过final解密并去除填充后的长度
int rv;
EVP_CIPHER_CTX ctx;
//初始化ctx
EVP_CIPHER_CTX_init(&ctx);
//设置解密的算法、key和iv
rv = EVP_DecryptInit_ex(&ctx,EVP_des_ede3_ecb(),NULL,key,iv);
if(rv != 1)
{
EVP_CIPHER_CTX_cleanup(&ctx);
return -1;
}
//循环读取原文,解密后后保存到明文文件。
rv = EVP_DecryptUpdate(&ctx,out_dec,&outl,in_dec,in_len);//解密
if(rv != 1)
{
EVP_CIPHER_CTX_cleanup(&ctx);
return -1;
}
//解密结束
rv = EVP_DecryptFinal_ex(&ctx,out_dec+outl,&outl2);
if(rv != 1)
{
EVP_CIPHER_CTX_cleanup(&ctx);
return -1;
}
*out_len=outl+outl2;
EVP_CIPHER_CTX_cleanup(&ctx);//清除EVP加密上下文环境
printf("解密已完成\n");
}
int main()
{
int len=128+4;
int dec_len,len2;
unsigned char key[EVP_MAX_KEY_LENGTH]; //保存密钥的数组
unsigned char iv[EVP_MAX_KEY_LENGTH]; //保存初始化向量的数组
//EVP加密上下文环境
unsigned char out[len+EVP_MAX_KEY_LENGTH]; //保存加密后明文的缓冲区数组
unsigned char dec[len+EVP_MAX_KEY_LENGTH]; //保存解密后明文的缓冲区数组
unsigned char in[len+EVP_MAX_KEY_LENGTH]; //保存原文的缓冲区
int i=0;
//设置key和iv
for(i=0;i<8;i++)
{
key[i]=i;
}
for(i=0;i<8;i++)
{
iv[i]=i;
}
for(i=0;i
{
in[i]=i;
}
disp(in,len);
EncryptBuffer(key,iv,in,dec,len,&dec_len);
printf("dec_len:%d\n",dec_len);
disp(dec,dec_len);
DecryptBuffer(key,iv,dec,out,dec_len,&len2);
disp(out,len2);
printf("解密候数据长度:%d\n",len2);
return 0;
}
OpenSSL 的详细介绍:请点这里
OpenSSL 的下载地址:请点这里
相关阅读:
linux c ecb 加密解密,OpenSSL对数组加密解密的完整实现代码相关推荐
- php signature解密,openssl RSA非对称加密、解密、签名、验签
需要先了解的openssl系列函数 openssl_pkey_get_private 从证书中解析获取私钥,以供使用.成功,返回真实的密钥资源标识符(Resource ID),否则返回false op ...
- 单片机c语言 openssl,Linux下C语言使用openssl库进行加密
在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...
- 黑客学习-密码学:基于openssl的算法加密和解密
在Linux系统中自带openssl工具,加密和解密,可以在Linux上进行.利 openssl工具,用DES.3DES.IDEA.AES等对称算法对文件加密解密,和用RSA非对称算法对文件加密解密. ...
- 文件加密及解密openssl
Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法. 下面我将单介绍使用Openssl进行文 ...
- php openssl加密数据长度,PHP使用openssl解密数据(用mcrypt加密)
所以我不需要评论3DES不安全和ECB不好等等,我们知道,这就是为什么我们试图解密,以有一个更好的加密算法. 我在下面提供了使用mcrypt进行加密的代码,以及我们试图使用的1行代码(openssl) ...
- linux文件加密代码,OpenSSL 加密文件的完整实现代码
本例是用C语言实现的加密和解密,读取一个文本文件,对内容加密后写入到另一个文件中,然后再解密,写入到第三个文件中. #include #include #include "openssl/e ...
- linux下使用openssl和md5sum加密文件或者字符串
linux下使用openssl和md5sum加密文件或者字符串 前言 1 用oppnssl md5 加密字符串和文件的方法 1.1 oppnssl md5 加密字符串的方法 a.手动输入命令及过程如下 ...
- 使用OpenSSL进行RSA加密和解密(非对称)
1. RSA加密和解密基础概念 RSA是一种非对称加密. RSA秘钥:私钥和公钥,一对私钥和公钥就像夫妻一样是唯一的,用私钥加密后必须用对应的公钥才能解密,用公钥加密后必须用对应的私钥才能解密. 加密 ...
- aes离线解密工具_如何在Python中解密OpenSSL AES加密文件?
OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文!)命令行界面: openssl aes-256-cbc -salt -in filename -out filename.enc Py ...
最新文章
- 散列表查找(哈希表)
- C#下把txt文件数据读进sql server中存储所遇到的乱码问题
- 用vbs自动切换不同网段的IP
- switch语句格式_JavaScript流程控制语句_if语句(十一)
- 【FBI WARNING】一些Noip的黑科技 持续整理!
- 深度学习之tensorflow环境搭建
- python3无法安装rpi gpio咋办_如何将RPi.GPIO安装到windows
- echarts折现变曲线_echarts将折线图改为曲线图
- 探索C/C++大数快(自然数)模板
- 毕业设计论文封面模板
- 全新的Smultron 12已发布:简单好用、功能强大、优雅简洁
- 权限提升 bypass
- android开发 自我优势_android开发简历自我评价填写样本
- pcie gen3 bios设置_性价比无敌or搞笑? A卡传统回来了!(附刷bios教程)
- jquery学习总结
- 数学专业英语-微积分篇
- python计算选手最后得分_哪位大侠帮我做做这些题目啊要用python的哦,跪求啊 做5个就成...
- javaSE-day04--ArrayList基本用方法、类内定义方法和方法重载、静态方法static(类的方法)、工具方法(static)的定义和使用
- atoi()函数的实现
- Cris 学 SpringMVC(二):使用 servlet 原生 api 作为方法入参
热门文章
- Zen Coding Visual Studio plugin 配置
- fibonacci数列前20项_数学第十七课:数列综合应用第一弹
- linux mp4v2编译,Android 编译mp4 v2 2.0.0生成动态库
- java类全路径简写_[JAVA] JAVA 类路径
- 换行 输出txt_编程短文:Bash echo如何原生输出带空格的字符串而不换行
- python2还是3好_学Python2还是python3 究竟哪个好
- 炫酷科技感超前的电子产品发布广告海报psd分层模板,带给你炫酷的未来感
- 就知道你会没灵感,感恩节psd分层海报模板来咯!
- 圣诞海报设计没有思路,素材技巧都来了!
- java getidentifier_android – 如何使用getResource.getIdentifier()获取布局?