Openssl Aes加解密使用示例
Openssl Aes加解密使用示例
- Aes简介
- 设置Aes密钥
- Aes算法CBC加解密
Aes简介
Aes是分组加密算法,主要基于块加密,选取固定长度的密钥去加密明文中固定长度的块,生成的密文块与明文块长度一样。
AES加密模式:
Aes共五种加密模式,本文以cbc模式为列。
1.电码本模式(Electronic Codebook Book (ECB)
2.密码分组链接模式(Cipher Block Chaining (CBC))
3.计算器模式(Counter (CTR))
4.密码反馈模式(Cipher FeedBack (CFB))
5.输出反馈模式(Output FeedBack (OFB))
使用场景:
Aes加密主要使用于对数据加密后还需要通过密文解密出明文的场景,如无需解出明文的可使用安全性更高的非对称加密。
设置Aes密钥
Aes对数据加密前需要先设置加密密钥,加密密钥的长度决定了暴力破解的难度,如果系统内存、性能允许,建议使用256 位以上长度的密钥进行加密。对密文解密时需要设置同样的密钥解密。
通过AES_set_encrypt_key接口可以设置加密密钥:
int AES_set_encrypt_key(const unsigned char *userKey, const int bits,AES_KEY *key);
userKey: 密钥数值;
bits:密钥长度,以bit为单位,如果密钥数字是16个字节,则此参数值应为128;
key: AES_KEY对象指针;
返回值: 0 成功, -1 userkey,key为空, -2: 密钥长度不是128,192,256;
通过AES_set_decrypt_key设置解密密钥
int AES_set_decrypt_key(const unsigned char *userKey, const int bits,AES_KEY *key);
userKey: 密钥数值;
bits:密钥长度,以bit为单位,如果密钥数字是16个字节,则此参数值应为128;
key: AES_KEY对象指针;
返回值: 0 成功, -1 userkey,key为空, -2: 密钥长度不是128,192,256;
Aes算法CBC加解密
Aes每次加密的内存块是16个字节,所以需要加密的内存块必须是16个字节的整数倍,若不是则需要进行补齐。ivec、usrKey可指通过函数随机生成后保存,也可以直接指定。
加密接口
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,size_t length, const AES_KEY *key,unsigned char *ivec, const int enc);
解密接口
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,size_t length, const AES_KEY *key,unsigned char *ivec, const int enc);
使用代码实例:
static unsigned char key[AES_BLOCK_SIZE*2] = "1wradfr4e3fefefad4545454h6thrsf";int aes256_encrypt(char* str_in, char* out)
{int i;int len;AES_KEY aes;unsigned char iv[AES_BLOCK_SIZE] = {0};if (!str_in || !out)return 0;len = strlen(str_in);for (i = 0; i < 16; ++i)iv[i] = i+32;if (AES_set_encrypt_key((unsigned char*)key, 256, &aes) < 0){return 0;}AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_ENCRYPT);return 1;
}int aes256_decrypt(char* str_in, char* out)
{int i;int len;AES_KEY aes;unsigned char iv[AES_BLOCK_SIZE] = {0};if (!str_in || !out)return -1;len = strlen(str_in);//确保里面的内容加密解密一样for (i = 0; i < 16; ++i) iv[i] = i+32;if (AES_set_decrypt_key((unsigned char*)key, 256, &aes) < 0){return -1;}AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_DECRYPT);return 0; }
Openssl Aes加解密使用示例相关推荐
- linux c openssl aes 加解密
1.OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是所有支持或者是部分支持. 返回值:"aes(full)&qu ...
- openssl aes加解密的使用
1.先写一个用于生产二进制文件的工具 使用说明:新建main.c,将代码拷贝到main.c中,在linux环境下执行gcc main.c -o x,输出可执行文件x #include <stdi ...
- Java与Winform进行AES加解密数据传输的工具类与对应关系和示例
场景 Android+Java中使用Aes对称加密的工具类与使用: Android+Java中使用Aes对称加密的工具类与使用_霸道流氓气质的博客-CSDN博客 上面讲的Java与安卓进行数据传输时使 ...
- openssl c++实现bouncycastle中AES加解密
0x01 为什么要用bouncycastle 先说说JCE(Java Cryptography Extension)是一组包,它们提供用于加密.密钥生成和协商以及 Message Authentica ...
- 利用openssl进行aes加解密
之前写过aes加密算法简单说明,本篇用openssl对aes的ecb和cbc模式进行代码编写. 现在拿128位的aes加解密进行说明. 首先强调的是,在openssl提供的函数中,加密和解密每次只能针 ...
- C语言实现AES加解密
C语言实现AES加解密 AES算法 具体代码 AES算法 (AES)RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于 ...
- 前端 crypto-js aes 加解密
背景 前段时间公司做项目,该项目涉及到的敏感数据比较多,经过的一波讨论之后,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~ 网上关于 AES 对称加密的算法介绍看上一篇! ...
- Golang AES 加解密
文章目录 AES 简介 AES 加解密实现 小结 参考文献 AES 简介 利用 Go 提供的 AES 加解密与 Base64 编解码包,我们可以轻松实现 AES 加解密.实现之前,首先了解一下 AES ...
- Java使用AES加解密
Java使用AES加解密 目录 1.1生成密钥 1.2密钥的存储 1.3获取存储的密钥 1.4加解密 1.5使用存储的密钥进行加解密示例 AES是一种对称的加密算法,可基于相同的密钥进行加密和解密.J ...
最新文章
- C# Winform下一个热插拔的MIS/MRP/ERP框架14(自动更新)
- linux grep 非_帮助非技术人员转向Linux的8条技巧
- 小结SpringMVC(一)
- 数据--第27课 - 初始斗转
- DTcms Core项目发布到IIS教程
- Python爬虫(一)--爬取猫眼Top100排行
- 中国土地市场销售规模状况与投资战略研究报告2022版
- 用project做项目计划及总结报表
- 360修复高危漏洞可以修复吗_Win7系统360安全卫士提示“进行漏洞的修复”是否该修复?...
- (阅读笔记)SecureNN: 3-Party Secure Computation for Neural Network Training
- 跑步耳机哪种好,适合运动佩戴的蓝牙耳机分享
- Java九十条经验法则之第一条:用静态工厂方法代替构造器
- Python Diary - Day 15 模块、异常和文件
- 基于FPGA的图像卷积设计与实现毕业论文
- 3G的发展:(4)大洋洲
- 网教9. 一夜发白《千字文》
- PlantUML 快速入门(二) UML 时序图
- 网站添加“分享按钮”
- 系统架构设计笔记(106)—— 物联网
- 使用视觉AI技术提高图片质量的几种方法
热门文章
- 距离盈利,B站还差几步?
- [go]Go语言编译器的 “//go:“ 详解
- 利用notepad++实现文件批量转换编码格式
- MySQL-18全文本搜索-必知必会
- 【ADRC】扩张状态观测器(ESO)
- 服务容错 - Hystrix
- 甲减、甲状腺相关疾病最新研究、治疗进展(2021年下半年)
- 一个简单的扑克牌小程序
- 2020-08-28
- 2019压强投入,华为云“Cloud+X”打开产业下一极空间