AEC加解密算法c语言实现
来源:互联网 发布:比基尼激光脱毛知乎 编辑:程序博客网 时间:2024/06/05 15:00
利用openssl对字符串进行AES加解密,代码如下
环境:需要在linux下搭建openssl开发环境。
#include <stdio.h>#include <openssl/aes.h>#include <stdlib.h>#include <string.h>int encrypt(char *input_string, char **encrypt_string){ AES_KEY aes; unsigned char key[AES_BLOCK_SIZE]; // AES_BLOCK_SIZE = 16 unsigned char iv[AES_BLOCK_SIZE]; // init vector unsigned int len; // encrypt length (in multiple of AES_BLOCK_SIZE) unsigned int i; // set the encryption length len = 0; if ((strlen(input_string) + 1) % AES_BLOCK_SIZE == 0) { len = strlen(input_string) + 1; } else { len = ((strlen(input_string) + 1) / AES_BLOCK_SIZE + 1) * AES_BLOCK_SIZE; } // Generate AES 128-bit key for (i=0; i<16; ++i) { key[i] = 32 + i; } // Set encryption key for (i=0; i<AES_BLOCK_SIZE; ++i) { iv[i] = 0; } if (AES_set_encrypt_key(key, 128, &aes) < 0) { fprintf(stderr, "Unable to set encryption key in AES\n"); exit(0); } // alloc encrypt_string *encrypt_string = (char*)calloc(len, sizeof(unsigned char)); if (*encrypt_string == NULL) { fprintf(stderr, "Unable to allocate memory for encrypt_string\n"); exit(-1); } // encrypt (iv will change) AES_cbc_encrypt((unsigned char *)input_string, (unsigned char *)*encrypt_string, len, &aes, iv, AES_ENCRYPT); return len;}void decrypt(char *encrypt_string, char **decrypt_string,int len){ unsigned char key[AES_BLOCK_SIZE]; // AES_BLOCK_SIZE = 16 unsigned char iv[AES_BLOCK_SIZE]; // init vector AES_KEY aes; int i; // Generate AES 128-bit key for (i=0; i<16; ++i) { key[i] = 32 + i; } // alloc decrypt_string *decrypt_string = ( char*)calloc(len, sizeof(unsigned char)); if (*decrypt_string == NULL) { fprintf(stderr, "Unable to allocate memory for decrypt_string\n"); exit(-1); } // Set decryption key for (i=0; i<AES_BLOCK_SIZE; ++i) { iv[i] = 0; } if (AES_set_decrypt_key(key, 128, &aes) < 0) { fprintf(stderr, "Unable to set decryption key in AES\n"); exit(-1); } // decrypt AES_cbc_encrypt((unsigned char *)encrypt_string,(unsigned char *) *decrypt_string, len, &aes, iv, AES_DECRYPT);}int main(void){ char *buffer = "libinbin"; char *encrypt_string = NULL; char *decryto_string = NULL; //add //进行加密处理 int encrypt_length = encrypt(buffer, &encrypt_string); printf("encrypt_length = %d,encrypt_string-->%s\n",encrypt_length,encrypt_string); //进行解密处理 decrypt(encrypt_string, &decryto_string, encrypt_length); printf("decryto_string-->%s\n",decryto_string); return 0;}
0 0
- AEC加解密算法c语言实现
- 凯撒加解密算法C语言实现
- 公有领域一AES加解密算法C语言实现,和一个小的改进
- C语言实现数据保护算法(1)——DES&3DES加解密
- C语言实现数据保护算法(2)——AES加解密
- c语言简单加解密
- C语言实现视频异或加/解密
- c实现的异或加解密算法
- DES加解密算法实现
- DES加解密+C实现
- c 实现aes加解密
- 【C/C++】:C++语言做加解密
- 关于go语言des加解密算法
- 巩固C语言(十二)----文件加解密
- C 语言版 DES加解密算法
- RC6加密解密算法实现(C语言)
- AES加解密算法Qt实现
- DES加解密算法Qt实现
- Genymotion问题解决之 INSTALL_FAILED_NO_MATCHING_ABIS (一)
- MongoDB3.0连接
- 130,NSDate的应用
- 2-2-求并集A=A∪B-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 按钮布局--自动换行
- AEC加解密算法c语言实现
- 多行文本垂直居中新方法
- Android 一些xml属性
- 语法
- 你觉得哪个开源的UML建模工具最好用?
- flash总结
- android开发 通过文字生成头像 (包含使用额外的字体)
- Java 线程 sleep wait 深入解析 Thread
- Android背景图片平铺