首页 | 新闻资讯 | 培训认证 | 安全管理 | 病毒分析 | 安全协议 | 网络安全 | 防火墙 | 黑客技术
DB安全 | Web安全 | 入侵检测 | 安全审计 | 设备安全 | 备份恢复 | 安全标准 | 法律法规 | 无线安全
OS安全 | PKI与PMI | 病毒防治 | 隔离网闸 | XML安全 | 网管专区 | 经典案例 | 技术论坛 |  
+ 文章搜索 +
当前位置:首页>>原创作品>>PKI与PMI>>正文
关键字:
范 围:
※推荐文章※
·openssl之pkcs7之3 signed-data内
·openssl之pkcs7之2 data内容类型
·openssl之pkcs7之1
·OpenSSL命令行常用功能(1)
·WEB安全模块源代码分析文档之十一
·WEB安全模块源代码分析文档之十-
openssl之pkcs7之4 Enveloped-data内容类型的编码解码
作者:eboymcy 文章出处:中国信息安全组织 发布时间:2006-05-23 点击: 字体: 【

(说明:openssl技术网站上有不少evp系列,asn1系列等技术资料,没找到关于pkcs7开发的,故整理了一下自己的学习笔记。由于水平有限,肯定有不少错误,请网友不吝赐教,本人万分感谢。如需转载请保留出处.

作者 eboymcy

)

关键字:openssl   pkcs7   Enveloped

正文:

PKCS7_ENVELOPE. enveloped在openssl中的定义如下:

typedef struct pkcs7_enveloped_st

{

ASN1_INTEGER             *version;     /* version 0 */

STACK_OF(PKCS7_RECIP_INFO)   *recipientinfo;

PKCS7_ENC_CONTENT         *enc_data;

} PKCS7_ENVELOPE;

enveloped-data内容类型由任意类型的加密内容和加密的一个/多个接收者的内容加密密钥组成。内容的密文和加密密钥一起构成了接收者的“数字信封”。任意类型的内容能够同时为任意数量的接收者进行封装。



Enveloped-data的组建过程分以下几步:

1.       随机产生一个对称密钥用于加密内容。

2.       内容加密密钥用每个接收者的公钥加密。

3.       对于每一个接收者,把内容加密密钥的密文和接收者的其他信息放入recipientinfo值中。

4.       用加密密钥加密内容。

5.       将所有接收者的recipientinfo值和加了密的内容放入EnvelopedData值中

接收者用自己的私钥解开内容加密密钥,然后用该密钥解密密文内容。

调用openssl的代码如下:

  PKCS7* p7 = PKCS7_new();

 

  //设置类型为NID_pkcs7_enveloped

PKCS7_set_type(p7, NID_pkcs7_enveloped);

//DES算法,用于加密内容“How are you!”

EVP_CIPHER *evp_cipher = EVP_des_cbc();

PKCS7_set_cipher(p7,cipher);

//设置接收者证书,获取公钥用于加密对称密钥

PKCS7_RECIP_INFO *p7recipinfo = PKCS7_add_recipient(p7,x509_Cert);

BIO *p7bio = PKCS7_dataInit(p7, NULL);

BIO_write(p7bio,”How Are You!”,strlen(“How Are You!”));

//完成数字信封的运算

PKCS7_dataFinal(p7, p7bio);

//转换PKCS7结构体为DER编码

derLen = i2d_PKCS7(p7,&derTmp);

BIO_free(p7bio);

PKCS7_free(p7);    

   

解P7数字信封的代码:

//der编码转换为PKCS7结构体

PKCS7* p7 = d2i_PKCS7(NULL,&derTmp,derP7EnvelopedDataLen);

//解析出原始数据, evp_key:接收者私钥,x509_cert:接收者证书

BIO * p7bio = PKCS7_dataDecode(p7,evp_key,NULL,x509_cert);

//从BIO中读取原始数据,将得到"How are you!"

srcLen = BIO_read(p7bio,src,4096);

BIO_free(p7bio);

PKCS7_free(p7);


作者简介:
eboymcy,一直从事pki相关的研究和开发,中国信息安全组织PKI版版主。现为某CA中心高级软件工程师。
您可以通过以下方式联系他:
mail:eboymcy@163.com

返回顶部↑】 【推荐好友】 【查看评论
用户名: 新注册) 密码: 匿名评论 [查看评论] 发表评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  Copyright © 2004-2005 infosecurity.org.cn . All Rights Reserved
版权所有:中国信息安全组织 系统管理:webmaster@infosecurity.net.cn
本站部分资源来自互联网,如有侵犯您的版权或其他问题,请通知管理员,我们会尽快处理!