openssl对数组加密解密的完整实现代码
来源:互联网 发布:php跟java的区别 商城 编辑:程序博客网 时间:2024/06/06 07:22
本例是用C实现的对一个数组进行加密,加密到第二个数组,然后解密到另一个数组的完整实现代码。
#include <stdio.h>#include <string.h>#include "openssl/evp.h"#include "openssl/x509.h"static void disp(void * pbuf,int size){ int i=0; for( i=0;i<size;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<len;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;}
阅读全文
0 0
- openssl对数组加密解密的完整实现代码-
- openssl对数组加密解密的完整实现代码
- openssl 加密文件的完整实现代码
- OpenSSL 加密文件的完整实现代码
- openssl 加密文件的完整实现代码
- java代码实现对文件的base64加密解密
- openssl的rsa加密解密在js的实现
- 用openssl对文件加密及解密
- 用openssl对文件加密及解密
- openssl实现iOS 和 java服务器端的rsa加密解密。
- 安装openssl及实现RSA加密解密的详细步骤
- 有点bt的加密解密代码完整示列
- 使用Java Base64解密算对openssl的base64加密字符串进行解密
- 通过 JNI 调用 OpenSSL 实现加密解密
- 利用openssl实现字符串加密解密
- php 实现php代码的加密解密
- 简单的一行代码实现加密解密
- 【加密解密】对字符串的加密解密
- 关于tableau表格,百分比无法加权汇总
- Java通过fill()方法替换数组元素
- [App] MongoDB Cluster 配置
- java double类型保留位数、double转int
- 集合框架方法和迭代器Iterator
- openssl对数组加密解密的完整实现代码
- 722. Remove Comments
- php 登录后返回上一页面
- spring boot 中 Mybatis plus 多数据源的配置
- vim 批量重载缓冲区
- android 使用相机拍照以及FileProvider源码浅析
- 数据结构期末复习:排序算法
- jquery下的ajax详解
- 直播SDK加入混响效果,创造演唱会现场沉浸感音效