使用openssl实现AES CBC 128 pcks7加密
1、参考代码
openssl evp 对称加密(AES_ecb,ccb) - cocoajin - 博客园
//加密
int kk_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,unsigned char *iv, unsigned char *ciphertext)
{EVP_CIPHER_CTX *ctx;int len;int ciphertext_len;ctx = EVP_CIPHER_CTX_new();EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv);EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len);ciphertext_len = len;EVP_EncryptFinal_ex(ctx, ciphertext + len, &len);ciphertext_len += len;EVP_CIPHER_CTX_free(ctx);return ciphertext_len;
}//解密
int kk_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,unsigned char *iv, unsigned char *plaintext)
{EVP_CIPHER_CTX *ctx;int len;int plaintext_len;ctx = EVP_CIPHER_CTX_new();EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv);EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len);plaintext_len = len;EVP_DecryptFinal_ex(ctx, plaintext + len, &len);plaintext_len += len;EVP_CIPHER_CTX_free(ctx);return plaintext_len;
}
char *key = "0011223344556677";
char *iv = "0102030405060708";
BYTE ciper[32] = {0};CString strSrc;
GetDlgItemText(IDC_EDIT_Src, strSrc);CString strUtf8 = Encoder::ANSItoUTF8(strSrc);
int ciperLen = kk_encrypt((BYTE *)(LPCTSTR)strUtf8, strUtf8.GetLength(), (BYTE*)key, (BYTE*)iv, ciper);
2、VS环境搭建
在VS中使用OpenSSL库 - 潇潇O - 博客园
3、填充设置
AES 的 EVP_CIPHER_CTX_set_padding 的padding设置_hddong97的博客-CSDN博客_evp_cipher_ctx
函数全称:
int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
可以设置在加密数据时对不够长的数据进行填充的方式,pad可以设置为以下几个
//in file openssl/evp.h
#define EVP_PADDING_PKCS7 1
#define EVP_PADDING_ISO7816_4 2
#define EVP_PADDING_ANSI923 3
#define EVP_PADDING_ISO10126 4
#define EVP_PADDING_ZERO 5
使用openssl实现AES CBC 128 pcks7加密相关推荐
- javascript ←AES.CBC→ go 相互加密解密
文章目录 加密 go javascript 解密 go javascript 发现没有完整的 js 和 go 的CBC模式相互加密解密,记录一下 代码来自网络,进行一次整理 加密 go func Ae ...
- C语言利用openSSL库AES模块加密
概述 在密码学里面一共有3中分类: 1.对称加密/解密 对称加密比较常见的有DES/AES.加密方和解密方都持有相同的密钥.对称的意思就是加密和解密都是用相同的密钥. 2.非对称加密/解密 常见的加密 ...
- linux下面C 利用openssl的AES库加密,解密
OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是全部支持或者是部分支持. 返回值:"aes(full)" ...
- php aes 128位加密,php实现AES 128位加密的相关操作技巧分享
php实现AES 128位加密的相关操作技巧是什么?这篇文章主要介绍了PHP实现的AES 128位加密算法,结合实例形式分析了AES 128位加密的相关概念.原理及php实现AES 128位加密的相关 ...
- java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法
在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里 ...
- openssl的AES加密(base64编码)
openssl的AES加密(base64编码) [ base64编码/解码 ] AES加密后为乱码,使用base64编码后显示正常 /********************************* ...
- AES CBC 加密解密(偏移量)
参考文章:AES加密解密(ECB模式) 工具:在线AES加密解密 使用固定的key package com.eshore.cloud.utils;import android.text.TextUti ...
- AES CBC加密/解密
简介 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的D ...
- python aes加密 cbc_【转载】python AES CBC模式加密
今天需要用到AES CBC模式加密,搜索了很久,终于加密成功,记录一下今天的理解. 首先要安装pycrypto库,不知道为什么在windows安装失败,在linux可以正常安装 这里有几点要注意,ke ...
- AES cbc加密开源库收集
1.openssl加密 OpenSSL中AES加密的用法 - 游蓝海2017 - 博客园<OpenSSL中AES加密的用法> 作者: 游蓝海 原文链接: http://blog ...
最新文章
- 为uThreadPool增加线程池等待功能
- NLP模型也有“老师”了!装上这个开源库,1毫秒纠正语法错误
- MySQL replace into 的坑以及insert相关操作
- 3、 AUTO_INCREMENT:主键自增长
- mysql查询语句4,MySQL(4):CRUD语句(2)——基本查询
- LeetCode 598. 范围求和 II
- 【大数据】最新大数据学习路线(完整详细版,含整套教程)
- Java中的浮点数四舍五入到小数点后2位的一些实用方法
- 一目了然,看民生银行 IT 运维故障管理可视化案例
- Tabulator PDF下载中文字体设置
- 英语六级高频词汇速记 + 2018-6-2听力 Day02
- 清华EMBA课程系列思考之二 -- 清华探究及信息战略与管理
- wordpress博客设置赞赏和内容会员可见以及跨境电商独立站
- ch341a编程器写操作超时失败
- 【测试】软件测试之黑盒、白盒、灰盒测试
- 「DR老兵寻访」游戏正规军的“万智牌生态”链改计划
- ubuntu禁用笔记本触摸板
- Android 刘海屏的适配
- 消除疑虑:一切假大空都是纸老虎
- Calibre 制作电子书