zoukankan      html  css  js  c++  java
  • openssl之EVP系列之12---EVP_Seal系列函数介绍

    openssl之EVP系列之12---EVP_Seal系列函数介绍
        ---依据openssl doc/crypto/EVP_SealInit.pod翻译和自己的理解写成
        (作者:DragonKing, Mail: wzhah@263.net ,公布于:http://openssl.126.com 之openssl专业论坛,版本号:openssl-0.9.7)
        改系列函数是相当于完毕一个电子信封的功能。它产生一个随机密钥,然后使用一个公钥对改密钥进行封装,数据能够使用随机密钥进行加密。


        信封加密在进行大量传输数据的时候是必须常常要用到的,由于公开密钥算法的加解密速度非常慢,但对称算法就快多了。所以一般用公开密钥算法进行加密密钥的传输,而真正进行数据加密则使用对称加密算法。
        其定义的函数例如以下(openssl/evp.h):
         int EVP_SealInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char **ek,
         int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
         int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
         int *outl, unsigned char *in, int inl);
         int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
         int *outl);
        【EVP_SealInit】
        该函数初始化一个加密算法结构EVP_CIPHER_CTX。採用了指定的加密算法。使用一个随机密钥和初始化向量IV。其实,该函数调用EVP_EncryptInit_ex函数两次完毕了ctx结构的初始化工作。

    參数type是算法类型,跟签名介绍过的是一样的,为EVP_des_cbc类型的函数。随机私钥被一个或多个公钥加密,这就同意秘钥被公钥对应的私钥解密。參数ek是一个缓存序列,能够存放多个被公钥加密后的密钥的信息。所以每一个缓存空间都应该足够大。比方ek[i]的缓存空间就必须为EVP_PKEY_size(pubk[i])那么大。每一个被加密密钥的长度保存在数字ekl中。參数pubk是一个公钥陈列,能够包括多个公钥。函数成功运行返回npubk,失败返回0。
        由于该函数的密钥是随机产生的。任意在调用该函数之前,必须对随机数播种(seeded)。
        使用的公钥必须是RSA,由于在openssl里面这是唯一支持密钥传输的公钥算法。
        跟EVP_EncryptInit函数一样,本函数也能够分为两次调用。第一次调用的时候要将參数npubk设为0,第二调用的时候就应该将參数type设为NULL。


        【EVP_SealUpdate】
        该函数是一个宏定义函数。事实上际定义例如以下:
        #define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e)
        由此可见。其完毕的功能和用法跟EVP_EncryptUpdate函数是一样的。细节參看前面介绍的文章。

    成功运行返回1。否则返回0。
        【EVP_SealFinal】
        该函数简单调用了EVP_EncryptFinal_ex完毕其功能,所以其完毕的功能和使用參数也跟EVP_EncryptFinal_ex函数一样,细节请參考相关文章。

    唯一不一样的是。该函数还调用EVP_EncryptInit_ex(ctx,NULL,NULL,NULL,NULL)函数对ctx结构再次进行了初始化。

    成功返回1,否则返回0。

  • 相关阅读:
    Object C学习笔记25-文件管理(一)
    实施项目--为什么开发人员一直在抱怨需求变动
    Git.Framework 框架随手记--准备工作
    一网打尽!2018网络安全事件最全的盘点
    林纳斯·托瓦兹和Linux行为准则:揭穿7个谬论
    LinkedList源码解析
    四种List实现类的对比总结
    HashMap源码解析
    volatile
    Java内存模型与共享变量可见性
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6800807.html
Copyright © 2011-2022 走看看