openssl之aes对称加密
AES:密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 Rijndael加密法。
对称加密:用同一个密码 加密/解密 文件。
使用openssl中的两函数加密解密 (默认只能加密16字节)
AES_set_encrypt_key(unsigned char*)key, int, &AES_KEY) -- 加密密钥
AES_set_decrypt_key(unsigned char*)key, int, &AES_KEY) -- 解密密钥
AES_cbc_encrypt(unsigned char*)str_in, (unsigned char*)out, int len, &AES_KE Y, unsigned char*, AES_DECRYPT)
#include "openssl/aes.h" unsigned char key[AES_BLOCK_SIZE];
unsigned char iv[AES_BLOCK_SIZE]; #define AES_BITS 10240
#define MSG_LEN 10240 /**********************************************************
函数名:getlen
参数:char *result --字符串地址
返回值:int --字符串长度
说明: --获取字符串长度
***********************************************************/
int getlen(char *result){
int i = ;
while (result[i] != '\0'){
i++;
}
return i;
}
加密:
/**********************************************************
函数名:aes_encrypt
参数:const char* str_in --输入字符
参数:unsigned char* key --key
参数:unsigned char* out --输出字符
返回值:int --0失败 1成功
说明:加密
***********************************************************/
int aes_encrypt(char* str_in, char* key, char* out)
{
if (!str_in || !key || !out) return ; //加密的初始化向量
unsigned char iv[AES_BLOCK_SIZE]; //16位密码
char tmpIV[] = "0123456789abcdef";
for (int i = ; i < ; ++i)
iv[i] = tmpIV[i]; AES_KEY aes;
if (AES_set_encrypt_key((unsigned char*)key, , &aes) < )
{
return ;
} int len = getlen(str_in); AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_ENCRYPT);
return ;
}
解密:
/**********************************************************
函数名:aes_decrypt
参数:const char* str_in --输入
参数:unsigned char* key --key
参数:unsigned char* out --输出
返回值:int --0失败 1成功
说明: --解密
***********************************************************/
int aes_decrypt(char* str_in, char* key, char* out)
{
if (!str_in || !key || !out) return ;
unsigned char iv[AES_BLOCK_SIZE];//加密的初始化向量
char tmpIV[] = "0123456789abcdef";
for (int i = ; i < ; ++i)
iv[i] = tmpIV[i];
AES_KEY aes;
if (AES_set_decrypt_key((unsigned char*)key, , &aes) < )
{
return ;
} int len = getlen(str_in); AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_DECRYPT);
return ;
}
问题:每次只能加密16个字节
查看源码:





openssl之aes对称加密的更多相关文章
- AES对称加密和解密
package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...
- AES对称加密
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...
- java的AES对称加密和解密,有偏移量
import java.math.BigDecimal; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; i ...
- AES对称加密和解密(转)
AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...
- 正确使用AES对称加密
正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到 ...
- JAVA中AES对称加密和解密
AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...
- AES对称加密解密类
import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...
- linux以下C 利用openssl的AES库加密,解密
OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是所有支持或者是部分支持. 返回值:"aes(full)" ...
- openssl 下的对称加密和非对称加密
对称加密: 在加密和解密过程中使用相同的密钥, 或是两个可以简单地相互推算的密钥的加密算法. 非对称加密: 也称为公开加密, 它需要一个密钥对, 一个是公钥, 一个是私钥, 一个负责加密, 一个负责解 ...
随机推荐
- 我用数据结构花了一夜给女朋友写了个h5走迷宫小游戏
目录 起因 分析 画线(棋盘) 画迷宫 方块移动 结语 @(文章目录) 先看效果图(在线电脑尝试地址http://biggsai.com/maze.html): 起因 又到深夜了,我按照以往在公众号写 ...
- OpenGL在ubuntu下的成功配置
sudo apt-get update sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo a ...
- 检查图片是否损坏、图片后缀是否与实际图片类型对应 - Python
图片工具 检查图片是否损坏 日常工作中,时常会需要用到图片,有时候图片在下载.解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本: 测试图片,0.jpg是正常的 ...
- Javascript的基础
ECMAScript(语法.标准) BOM(浏览器) DOM(网页) ECMAScript是一个标准,它规定了语法.类型.语句.关键字.保留子.操作符.对象.(相当于法律) BOM(浏览器对象模型): ...
- Multiple types were found that match the controller named 'Auth'.
偶然的一个机会,修改了已经开发完毕的一个项目的命名.突然运行发现: { "Message": "An error has occurred.", "E ...
- 性能优化:虚拟列表,如何渲染10万条数据的dom,页面同时不卡顿
列表大概有2万条数据,又不让做成分页,如果页面直接渲染2万条数据,在一些低配电脑上可能会照成页面卡死,基于这个需求,我们来手写一个虚拟列表 思路 列表中固定只显示少量的数据,比如60条 在列表滚动的时 ...
- MySQL命令窗口出现中文乱码的解决方法
查询表语句的时候,出现了中文乱码,但是用Navicat for MySQL查看的时候却是正常的,字符集都是设置的utf-8,如下图所示: 其实上大学学习java的时候也遇到了中文乱码但是却没有 ...
- mysql 5.7 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ...报错
使用mysql在执行一条插入语句时 , ', "hhh"); 报错:Expression #1 of ORDER BY clause is not in GROUP BY clau ...
- Docker系列(四):容器之间的网络通信
首先我们需要知道:两个容器要能通信,必须要有属于同一个网络的网卡. 先来看下正常情况下我们的容器默认是否是能通信的,这里运行两个测试容器: docker run -it --name=bbox1 bu ...
- 在vue的mounted下使用setInterval的误区
1. vue对象的生命周期 1). 初始化显示(只执行一次) * beforeCreate() * created() * beforeMount() * mounted() 2). 更新状态(可执行 ...