本例是用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对数组加密解密的完整实现代码相关推荐

  1. php signature解密,openssl RSA非对称加密、解密、签名、验签

    需要先了解的openssl系列函数 openssl_pkey_get_private 从证书中解析获取私钥,以供使用.成功,返回真实的密钥资源标识符(Resource ID),否则返回false op ...

  2. 单片机c语言 openssl,Linux下C语言使用openssl库进行加密

    在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...

  3. 黑客学习-密码学:基于openssl的算法加密和解密

    在Linux系统中自带openssl工具,加密和解密,可以在Linux上进行.利 openssl工具,用DES.3DES.IDEA.AES等对称算法对文件加密解密,和用RSA非对称算法对文件加密解密. ...

  4. 文件加密及解密openssl

    Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法. 下面我将单介绍使用Openssl进行文 ...

  5. php openssl加密数据长度,PHP使用openssl解密数据(用mcrypt加密)

    所以我不需要评论3DES不安全和ECB不好等等,我们知道,这就是为什么我们试图解密,以有一个更好的加密算法. 我在下面提供了使用mcrypt进行加密的代码,以及我们试图使用的1行代码(openssl) ...

  6. linux文件加密代码,OpenSSL 加密文件的完整实现代码

    本例是用C语言实现的加密和解密,读取一个文本文件,对内容加密后写入到另一个文件中,然后再解密,写入到第三个文件中. #include #include #include "openssl/e ...

  7. linux下使用openssl和md5sum加密文件或者字符串

    linux下使用openssl和md5sum加密文件或者字符串 前言 1 用oppnssl md5 加密字符串和文件的方法 1.1 oppnssl md5 加密字符串的方法 a.手动输入命令及过程如下 ...

  8. 使用OpenSSL进行RSA加密和解密(非对称)

    1. RSA加密和解密基础概念 RSA是一种非对称加密. RSA秘钥:私钥和公钥,一对私钥和公钥就像夫妻一样是唯一的,用私钥加密后必须用对应的公钥才能解密,用公钥加密后必须用对应的私钥才能解密. 加密 ...

  9. aes离线解密工具_如何在Python中解密OpenSSL AES加密文件?

    OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文!)命令行界面: openssl aes-256-cbc -salt -in filename -out filename.enc Py ...

最新文章

  1. 散列表查找(哈希表)
  2. C#下把txt文件数据读进sql server中存储所遇到的乱码问题
  3. 用vbs自动切换不同网段的IP
  4. switch语句格式_JavaScript流程控制语句_if语句(十一)
  5. 【FBI WARNING】一些Noip的黑科技 持续整理!
  6. 深度学习之tensorflow环境搭建
  7. python3无法安装rpi gpio咋办_如何将RPi.GPIO安装到windows
  8. echarts折现变曲线_echarts将折线图改为曲线图
  9. 探索C/C++大数快(自然数)模板
  10. 毕业设计论文封面模板
  11. 全新的Smultron 12已发布:简单好用、功能强大、优雅简洁
  12. 权限提升 bypass
  13. android开发 自我优势_android开发简历自我评价填写样本
  14. pcie gen3 bios设置_性价比无敌or搞笑? A卡传统回来了!(附刷bios教程)
  15. jquery学习总结
  16. 数学专业英语-微积分篇
  17. python计算选手最后得分_哪位大侠帮我做做这些题目啊要用python的哦,跪求啊 做5个就成...
  18. javaSE-day04--ArrayList基本用方法、类内定义方法和方法重载、静态方法static(类的方法)、工具方法(static)的定义和使用
  19. atoi()函数的实现
  20. Cris 学 SpringMVC(二):使用 servlet 原生 api 作为方法入参

热门文章

  1. Zen Coding Visual Studio plugin 配置
  2. fibonacci数列前20项_数学第十七课:数列综合应用第一弹
  3. linux mp4v2编译,Android 编译mp4 v2 2.0.0生成动态库
  4. java类全路径简写_[JAVA] JAVA 类路径
  5. 换行 输出txt_编程短文:Bash echo如何原生输出带空格的字符串而不换行
  6. python2还是3好_学Python2还是python3 究竟哪个好
  7. 炫酷科技感超前的电子产品发布广告海报psd分层模板,带给你炫酷的未来感
  8. 就知道你会没灵感,感恩节psd分层海报模板来咯!
  9. 圣诞海报设计没有思路,素材技巧都来了!
  10. java getidentifier_android – 如何使用getResource.getIdentifier()获取布局?