openssl常用的EVP_CIPHER值
openssl常用的EVP_CIPHER值
目录
- openssl常用的EVP_CIPHER值
- 一. 加解密步骤
- 1. 创建结构体
- 2. 初始化结构体
- 3. 初始化上下文
- 4. 更新(塞数据)
- 5. 最终(获得数据长度)
- 6. 清理结构体
- 7. 释放结构体
- 二. EVP_CIPHER值
- 1. AES
- AES_128
- AES_192
- AES_256
- 2. DES
- DES加密 (一次加密)
- DES ede2 加密(两个密钥三重加密)
- DES ede3 加密(三个密钥三重加密)
一. 加解密步骤
1. 创建结构体
EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
2. 初始化结构体
void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
3. 初始化上下文
int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,const unsigned char *key, const unsigned char *iv,int enc);
int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,ENGINE *impl, const unsigned char *key,const unsigned char *iv, int enc);
int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,const unsigned char *key, const unsigned char *iv);
int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,ENGINE *impl, const unsigned char *key,const unsigned char *iv);
int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,const unsigned char *key, const unsigned char *iv);
int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,ENGINE *impl, const unsigned char *key,const unsigned char *iv);
4. 更新(塞数据)
int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,const unsigned char *in, int inl);
int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,const unsigned char *in, int inl);
int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,const unsigned char *in, int inl);
其实可以全用EVP_CipherUpdate塞数据数据
int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,const unsigned char *in, int inl)
{if (ctx->encrypt)return EVP_EncryptUpdate(ctx, out, outl, in, inl);elsereturn EVP_DecryptUpdate(ctx, out, outl, in, inl);
}
5. 最终(获得数据长度)
int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
最终调用的是EVP_EncryptFinal_ex和EVP_DecryptFinal_ex两个函数
int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{if (ctx->encrypt)return EVP_EncryptFinal_ex(ctx, out, outl);elsereturn EVP_DecryptFinal_ex(ctx, out, outl);
}
int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{if (ctx->encrypt)return EVP_EncryptFinal(ctx, out, outl);elsereturn EVP_DecryptFinal(ctx, out, outl);
}
int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{int ret;ret = EVP_EncryptFinal_ex(ctx, out, outl);return ret;
}
int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{int ret;ret = EVP_DecryptFinal_ex(ctx, out, outl);return ret;
}
6. 清理结构体
int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
7. 释放结构体
void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);
二. EVP_CIPHER值
初始化结构体上下文时,第二个参数配置加解密方式。
int EVP_CipherInit
int EVP_CipherInit_ex
int EVP_EncryptInit
int EVP_EncryptInit_ex
int EVP_DecryptInit
int EVP_DecryptInit_ex
第二个参数是一个常量的EVP_CIPHER结构体,openssl准备了很多例程,下面是常见的例程
1. AES
AES_128
// AES128位密钥加密(加密模式:ecb,cbc,ctr,ofb,cfb)
EVP_aes_128_ecb()
EVP_aes_128_cbc()
EVP_aes_128_ctr()
EVP_aes_128_ofb()
EVP_aes_128_cfb()
AES_192
// AES192位密钥加密(加密模式:ecb,cbc,ctr,ofb,cfb)
EVP_aes_192_ecb()
EVP_aes_192_cbc()
EVP_aes_192_ctr()
EVP_aes_192_ofb()
EVP_aes_192_cfb()
AES_256
// AES256位密钥加密(加密模式:ecb,cbc,ctr,ofb,cfb)
EVP_aes_256_ecb()
EVP_aes_256_cbc()
EVP_aes_256_ctr()
EVP_aes_256_ofb()
EVP_aes_256_cfb()
2. DES
DES加密 (一次加密)
密钥长度64位,使用56位数据
// DES加密(加密模式:ecb,cbc,ofb,cfb)
EVP_des_ecb()
EVP_des_cbc()
EVP_aes_ofb()
EVP_des_cfb()
DES ede2 加密(两个密钥三重加密)
密钥长度128位,使用112位数据
//DES两个密钥三重加密(加密模式:ecb,cbc,ofb,cfb)
EVP_des_ede_ecb()
EVP_des_ede_cbc()
EVP_aes_ede_ofb()
EVP_des_ede_cfb()
DES ede3 加密(三个密钥三重加密)
密钥长度192位,使用168位数据
//DES三键三重加密(加密模式:ecb,cbc,ofb,cfb)
EVP_des_ede3_ecb()
EVP_des_ede3_cbc()
EVP_aes_ede3_ofb()
EVP_des_ede3_cfb()
openssl常用的EVP_CIPHER值相关推荐
- OpenSSL常用函数分类索引
OpenSSL常用函数分类索引 内存管理 void *OPENSSL_malloc(size_t num) void *OPENSSL_zalloc(size_t num) void *OPENSSL ...
- OpenSSL常用命令快速上手
OpenSSL常用命令快速上手 RSA篇 我们的操作流程为: 生成RSA密钥key.pem(也称私钥,密钥对). 从key.pem中导出公钥pubkey.pem. 使用公钥pubkey.pem对文件t ...
- Android常用颜色RGB值以及中英文名称
Android常用颜色RGB值以及中英文名称 颜色 RGB值 英文名 中文名 #FFB6C1 LightPink 浅粉红 #FFC0CB Pink 粉红 #DC143C Crimson 深 ...
- 常用的RGB值和颜色对照表
常用颜色的值 Colour Red Green Blue 值 黑色 Black 0 0 0 0 ...
- Abaqus中常用的幅值曲线
ABAQUS常用的幅值曲线-技术邻社区 (jishulink.com) https://www.jishulink.com/content/post/434578 本篇文章旨在分享推广,如有侵权,若侵 ...
- 常用电阻阻值表常用电容容值
常用电阻阻值表&常用电容容值 常用电阻阻值表 精度为5%的碳膜电阻,以欧姆为单位的标称值: 1.0 5.6 33 160 820 ...
- 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?
转载:http://blog.csdn.net/stpeace/article/details/41922115 openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码: [cpp ...
- openssl常用用法
2019独角兽企业重金招聘Python工程师标准>>> OpenSSL主要有三个组件构成: openssl: 多用途命令行工具 libcrypto: 加密算法库 libssl: 加密 ...
- 常用ASCII码值以及大小写字母转换
不知道大家在编程时需要使用到ASCII码但不记得是什么感觉,但对我来说就是 遇到啊,就遭老罪了~~~ 这里列出一些常用的ASCII码值,还有ASCII标准表,希望可以帮助到大家: a-z:97-122 ...
最新文章
- php除去重复数组算法,如何从PHP中的多维数组中删除重复值
- AI一分钟 | 李开复:AI创业公司估值今年会降20%~30%;谷歌让搜索结果加载速度提升两倍...
- 编写一个程序,打印输入中各个字符出现频度的直方图
- 如何学习sql语言?
- java EE中JPA介绍
- 扫地机器人欠压检测电路_扫地机器人智能家居必备!靠传感器感知外界环境?...
- windows7系统屏幕一直闪屏的解决教程
- 豆米--基于豆瓣API的WP7书籍搜索工具开源啦!
- 你敢花一天时间看完本文在简历上添一笔“熟练使用C++编程”吗?
- phalcon index.php,Phalcon环境搭建与项目开发
- 使用DQL查询数据(重点)
- 解决Macbook网络连接成功但是图标一直显示正在查找网络问题
- 华为数通ensp命令(三)
- AXure交互设计指南
- Spring5:p命名和c命名空间注入
- 微信小程序系列2——小程序页面渲染和逻辑的关系
- IBM WebsPhere Jndi数据源
- IEC61850笔记--IEC61850应用入门(三)
- Kali Linux 2020.3 最新版壁纸 —— 那些好看你又苦苦寻找的黑客壁纸
- 遗传算法、遗传算法库函数ga和gamultiobj、遗传算法工具箱GOT实例介绍
热门文章
- cisco命令防ping_Cisco基本命令配置
- 安卓背景音乐开关_微信这个功能你知道了么?打开这个开关,能把手机照片拼接成长图...
- linux centos 解压 tar.bz2文件
- Java项目:ssh在线招投标系统
- kicad 自动生成封装库_kiCAD 从原理图到PCB封装
- 【CocosBuilder 开发系列之一】cocos2dx使用CocosBuilder完成骨骼动画
- 软件工程毕业设计 SSM房屋租赁管理系统(源码+论文)
- anaconda python下载math库_Anaconda下载及安装及查看安装的Python库用法
- C/C++语言100题练习计划 94——矩阵转置(线性代数)
- CAPL控制程控电源