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加解密使用示例相关推荐

  1. linux c openssl aes 加解密

    1.OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是所有支持或者是部分支持. 返回值:"aes(full)&qu ...

  2. openssl aes加解密的使用

    1.先写一个用于生产二进制文件的工具 使用说明:新建main.c,将代码拷贝到main.c中,在linux环境下执行gcc main.c -o x,输出可执行文件x #include <stdi ...

  3. Java与Winform进行AES加解密数据传输的工具类与对应关系和示例

    场景 Android+Java中使用Aes对称加密的工具类与使用: Android+Java中使用Aes对称加密的工具类与使用_霸道流氓气质的博客-CSDN博客 上面讲的Java与安卓进行数据传输时使 ...

  4. openssl c++实现bouncycastle中AES加解密

    0x01 为什么要用bouncycastle 先说说JCE(Java Cryptography Extension)是一组包,它们提供用于加密.密钥生成和协商以及 Message Authentica ...

  5. 利用openssl进行aes加解密

    之前写过aes加密算法简单说明,本篇用openssl对aes的ecb和cbc模式进行代码编写. 现在拿128位的aes加解密进行说明. 首先强调的是,在openssl提供的函数中,加密和解密每次只能针 ...

  6. C语言实现AES加解密

    C语言实现AES加解密 AES算法 具体代码 AES算法 (AES)RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于 ...

  7. 前端 crypto-js aes 加解密

    背景 前段时间公司做项目,该项目涉及到的敏感数据比较多,经过的一波讨论之后,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~ 网上关于 AES 对称加密的算法介绍看上一篇! ...

  8. Golang AES 加解密

    文章目录 AES 简介 AES 加解密实现 小结 参考文献 AES 简介 利用 Go 提供的 AES 加解密与 Base64 编解码包,我们可以轻松实现 AES 加解密.实现之前,首先了解一下 AES ...

  9. Java使用AES加解密

    Java使用AES加解密 目录 1.1生成密钥 1.2密钥的存储 1.3获取存储的密钥 1.4加解密 1.5使用存储的密钥进行加解密示例 AES是一种对称的加密算法,可基于相同的密钥进行加密和解密.J ...

最新文章

  1. C# Winform下一个热插拔的MIS/MRP/ERP框架14(自动更新)
  2. linux grep 非_帮助非技术人员转向Linux的8条技巧
  3. 小结SpringMVC(一)
  4. 数据--第27课 - 初始斗转
  5. DTcms Core项目发布到IIS教程
  6. Python爬虫(一)--爬取猫眼Top100排行
  7. 中国土地市场销售规模状况与投资战略研究报告2022版
  8. 用project做项目计划及总结报表
  9. 360修复高危漏洞可以修复吗_Win7系统360安全卫士提示“进行漏洞的修复”是否该修复?...
  10. (阅读笔记)SecureNN: 3-Party Secure Computation for Neural Network Training
  11. 跑步耳机哪种好,适合运动佩戴的蓝牙耳机分享
  12. Java九十条经验法则之第一条:用静态工厂方法代替构造器
  13. Python Diary - Day 15 模块、异常和文件
  14. 基于FPGA的图像卷积设计与实现毕业论文
  15. 3G的发展:(4)大洋洲
  16. 网教9. 一夜发白《千字文》
  17. PlantUML 快速入门(二) UML 时序图
  18. 网站添加“分享按钮”
  19. 系统架构设计笔记(106)—— 物联网
  20. 使用视觉AI技术提高图片质量的几种方法

热门文章

  1. 距离盈利,B站还差几步?
  2. [go]Go语言编译器的 “//go:“ 详解
  3. 利用notepad++实现文件批量转换编码格式
  4. MySQL-18全文本搜索-必知必会
  5. 【ADRC】扩张状态观测器(ESO)
  6. 服务容错 - Hystrix
  7. 甲减、甲状腺相关疾病最新研究、治疗进展(2021年下半年)
  8. 一个简单的扑克牌小程序
  9. 2020-08-28
  10. 2019压强投入,华为云“Cloud+X”打开产业下一极空间