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值相关推荐

  1. OpenSSL常用函数分类索引

    OpenSSL常用函数分类索引 内存管理 void *OPENSSL_malloc(size_t num) void *OPENSSL_zalloc(size_t num) void *OPENSSL ...

  2. OpenSSL常用命令快速上手

    OpenSSL常用命令快速上手 RSA篇 我们的操作流程为: 生成RSA密钥key.pem(也称私钥,密钥对). 从key.pem中导出公钥pubkey.pem. 使用公钥pubkey.pem对文件t ...

  3. Android常用颜色RGB值以及中英文名称

    Android常用颜色RGB值以及中英文名称 颜色 RGB值 英文名 中文名   #FFB6C1 LightPink 浅粉红   #FFC0CB Pink 粉红   #DC143C Crimson 深 ...

  4. 常用的RGB值和颜色对照表

    常用颜色的值        Colour      Red      Green      Blue      值        黑色   Black    0   0    0    0       ...

  5. Abaqus中常用的幅值曲线

    ABAQUS常用的幅值曲线-技术邻社区 (jishulink.com) https://www.jishulink.com/content/post/434578 本篇文章旨在分享推广,如有侵权,若侵 ...

  6. 常用电阻阻值表常用电容容值

    常用电阻阻值表&常用电容容值 常用电阻阻值表 精度为5%的碳膜电阻,以欧姆为单位的标称值: 1.0       5.6       33        160        820       ...

  7. 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?

    转载:http://blog.csdn.net/stpeace/article/details/41922115 openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码: [cpp ...

  8. openssl常用用法

    2019独角兽企业重金招聘Python工程师标准>>> OpenSSL主要有三个组件构成: openssl: 多用途命令行工具 libcrypto: 加密算法库 libssl: 加密 ...

  9. 常用ASCII码值以及大小写字母转换

    不知道大家在编程时需要使用到ASCII码但不记得是什么感觉,但对我来说就是 遇到啊,就遭老罪了~~~ 这里列出一些常用的ASCII码值,还有ASCII标准表,希望可以帮助到大家: a-z:97-122 ...

最新文章

  1. php除去重复数组算法,如何从PHP中的多维数组中删除重复值
  2. AI一分钟 | 李开复:AI创业公司估值今年会降20%~30%;谷歌让搜索结果加载速度提升两倍...
  3. 编写一个程序,打印输入中各个字符出现频度的直方图
  4. 如何学习sql语言?
  5. java EE中JPA介绍
  6. 扫地机器人欠压检测电路_扫地机器人智能家居必备!靠传感器感知外界环境?...
  7. windows7系统屏幕一直闪屏的解决教程
  8. 豆米--基于豆瓣API的WP7书籍搜索工具开源啦!
  9. 你敢花一天时间看完本文在简历上添一笔“熟练使用C++编程”吗?
  10. phalcon index.php,Phalcon环境搭建与项目开发
  11. 使用DQL查询数据(重点)
  12. 解决Macbook网络连接成功但是图标一直显示正在查找网络问题
  13. 华为数通ensp命令(三)
  14. AXure交互设计指南
  15. Spring5:p命名和c命名空间注入
  16. 微信小程序系列2——小程序页面渲染和逻辑的关系
  17. IBM WebsPhere Jndi数据源
  18. IEC61850笔记--IEC61850应用入门(三)
  19. Kali Linux 2020.3 最新版壁纸 —— 那些好看你又苦苦寻找的黑客壁纸
  20. 遗传算法、遗传算法库函数ga和gamultiobj、遗传算法工具箱GOT实例介绍

热门文章

  1. cisco命令防ping_Cisco基本命令配置
  2. 安卓背景音乐开关_微信这个功能你知道了么?打开这个开关,能把手机照片拼接成长图...
  3. linux centos 解压 tar.bz2文件
  4. Java项目:ssh在线招投标系统
  5. kicad 自动生成封装库_kiCAD 从原理图到PCB封装
  6. 【CocosBuilder 开发系列之一】cocos2dx使用CocosBuilder完成骨骼动画
  7. 软件工程毕业设计 SSM房屋租赁管理系统(源码+论文)
  8. anaconda python下载math库_Anaconda下载及安装及查看安装的Python库用法
  9. C/C++语言100题练习计划 94——矩阵转置(线性代数)
  10. CAPL控制程控电源