openssl之EVP系列之2---对称加密算法概述

原创 2003年02月17日 09:53:00
openssl之EVP系列之2---对称加密算法概述
    ---根据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.doc部分翻译和自己的理解写成
    (作者:DragonKing, Mail: wzhah@263.net ,发布于:http://gdwzh.126.com之openssl专业论坛,版本:openssl-0.9.7)
    
    对称加密算法封装的函数系列名字是以EVP_Encrypt*...*开头的,其实,这些函数只是简单调用了EVP_Cipher*...*系列的同名函数,换一个名字可能是为了更好的区别和理解。除了实现了对称加密算法外,EVP_Encrypt*...*系列还对块加密算法提供了缓冲功能。以后我们可能会更多使用EVP_Cipher的术语,因为它是真正的实现结构。
    EVP_Cipher*...*得以实现的一个基本结构是下面定义的一个算法结构,它定义了EVP_Cipher系列函数应该采用什么算法进行数据处理,其定义如下(evp.h):
    typedef struct evp_cipher_st
    {
     int nid;
     int block_size;
     int key_len;
     int iv_len;
     unsigned long flags;
     int (*init)(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc);
     int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl);
     int (*cleanup)(EVP_CIPHER_CTX *);
     int ctx_size;
     int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *);
     int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *);
     int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Miscellaneous operations */
     void *app_data;
    }EVP_CIPHER;
    下面对这个结构的部分成员的含义作一些解释:
    nid——是算法类型的nid识别号,openssl里面每个对象都有一个内部唯一的识别ID
    block_size——是每次加密的数据块的长度,以字节为单位
    key_len——各种不同算法缺省的密钥长度
    iv_len——初始化向量的长度
    init——算法结构初始化函数,可以设置为加密模式还是解密模式
    do_cipher——进行数据加密或解密的函数
    cleanup——释放EVP_CIPHER_CTX结构里面的数据和设置。
    ctx_size——设定ctx->cipher_data数据的长度
    set_asn1_parameters——在EVP_CIPHER_CTX结构中通过参数设置一个ASN1_TYPE
    get_asn1_parameters——从一个ASN1_TYPE中取得参数
    ctrl——其它各种操作函数
    app_data——应用数据
    通过定义这样一个指向这个结构的指针,你就可以在连接程序的时候只连接自己使用的算法;而如果你是通过一个整数来指明应该使用什么算法的话,会导致所有算法的代码都被连接到代码中。通过这样一个结构,还可以自己增加新的算法。
    在这个基础上,每个EVP_Cipher*...*函数都维护着一个指向一个EVP_CIPHER_CTX结构的指针。
    typedef struct evp_cipher_ctx_st
    {
     const EVP_CIPHER *cipher;
     ENGINE *engine;
     int encrypt;
     int buf_len;
     unsigned char oiv[EVP_MAX_IV_LENGTH];
     unsigned char iv[EVP_MAX_IV_LENGTH];
     unsigned char buf[EVP_MAX_BLOCK_LENGTH];
     int num;
     void *app_data;
     int key_len;
     unsigned long flags;
     void *cipher_data;
     int final_used;
     int block_mask;
     unsigned char final[EVP_MAX_BLOCK_LENGTH];
     } EVP_CIPHER_CTX;
    下面对这个结构部分成员做简单的解释:
    cipher——是该结构相关的一个EVP_CIPHER算法结构
    engine——如果加密算法是ENGINE提供的,那么该成员保存了相关的函数接口
    encrypt——加密或解密的标志
    buf_len——该结构缓冲区里面当前的数据长度
    oiv——初始的初始化向量
    iv——工作时候使用的初始化向量
    buf——保存下来的部分需要数据
    num——在cfb/ofb模式的时候指定块长度
    app_data——应用程序要处理数据
    key_len——密钥长度,算法不一样长度也不一样
    cipher_data——加密后的数据
    
    上述两个结构是EVP_Cipher(EVP_Encrypt)系列的两个基本结构,它们的其它一些列函数都是以这两个结构为基础实现了。文件evp/evp_enc.c是最高层的封装实现,各种加密的算法的封装在p_enc.c里面实现,解密算法的封装在p_dec.c里面实现,而各个e_*.c文件则是真正实现了各种算法的加解密功能,当然它们其实也是一些封装函数,真正的算法实现在各个算法同名目录里面的文件实现。

openssl之EVP系列之2---对称加密算法概述

openssl之EVP系列之2---对称加密算法概述     ---根据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.do...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 13:54
  • 22782

openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及例子

openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及例子     ---根据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 14:02
  • 22202

OpenSSL库的RSA使用(上)-EVP方式

1          RSA加解密方式介绍 使用OpenSSL的RSA方式加解密有两种方式,一种是使用EVP系列函数,这些函数提供了对底层加解密函数的封装;另外一种是直接使用RSA相关的函数进行加解...
  • fenghaibo00
  • fenghaibo00
  • 2013年12月10日 18:33
  • 15295

openssl之EVP系列之2---对称加密算法概述

openssl之EVP系列之2---对称加密算法概述     ---根据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.do...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 13:54
  • 22782

openssl之EVP系列之3---EVP_Encrypt支持的对称加密算法列表

openssl之EVP系列之3---EVP_Encrypt支持的对称加密算法列表     ---根据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 13:59
  • 22597

对称加密算法之RC4介绍及OpenSSL中RC4常用函数使用举例

对称加密算法之RC4介绍及OpenSSL中RC4常用函数使用举例!
  • fengbingchun
  • fengbingchun
  • 2015年01月20日 21:30
  • 7478

openssl 对称加密算法enc命令详解

openssl 对称加密算法enc命令详解 1、对称加密算法概述 openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以...
  • m0_38023255
  • m0_38023255
  • 2017年12月01日 21:36
  • 56

OpenSSL中HMAC,MD5以及对称加密算法的应用

HMAC和MD5: HMAC的shiy
  • xiongtaoa7
  • xiongtaoa7
  • 2014年10月13日 16:24
  • 225

openssl 非对称加密算法RSA命令详解

1、非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1、加密密钥和解密密钥不同 2、密钥对中的一个密钥可以公开 3、根据公...
  • fishmai
  • fishmai
  • 2017年07月19日 19:18
  • 915

OpenSSL中对称加密算法DES常用函数使用举例

在这里转载,当自己记录一个笔记吧,转自:http://blog.csdn.net/fengbingchun/article/details/42611875 主要包括3个文件: ...
  • yangyangye
  • yangyangye
  • 2015年05月23日 15:06
  • 1686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openssl之EVP系列之2---对称加密算法概述
举报原因:
原因补充:

(最多只允许输入30个字)