关于openssl pkcs7 数字信封的问题
以下是我生成PKCS7 数字信封的一个例子,我想进行数字信封的生成和解析。可是无法正确的解析,运用 openssl 0.9.8.d 请哪位专家帮忙看下。,谢谢啦!
注:EVP_PKEY *priKey 之前与对应公钥证书已经进行过RSA 的加解密,运行正常。
char* ssl_PKCS7_get_Enveloped_data (EVP_PKEY *priKey)
{
//读取公钥证书
char buf[4096];
unsigned char *p;
char *DerPathCharp = "/Users/ipc/Desktop/openssl/rsa_encode_decode/CryptoDemo/yaclifecert.der";
FILE* fp=fopen(DerPathCharp,"rb");
if(!fp) return NO;
int len=fread(buf,1,5000,fp);
fclose(fp);
p=buf;
X509 *x509_Cert=X509_new();
d2i_X509(&x509_Cert,(const unsigned char **)&p,len);
//调用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,evp_cipher);
//设置接收者证书,获取公钥用于加密对称密钥
PKCS7_RECIP_INFO *p7recipinfo = PKCS7_add_recipient(p7,x509_Cert);
BIO *p7bio = PKCS7_dataInit(p7, NULL);
char *instr = "How Are You!";
BIO_write(p7bio,instr,strlen(instr));
printf("instr = %s",instr);
//完成数字信封的运算
PKCS7_dataFinal(p7, p7bio);
//转换PKCS7结构体为DER编码
X509* derTmp,*der;
int derLen = i2d_PKCS7(p7,NULL);
der = (unsigned char*)malloc(derLen);
derTmp = der;
//转换为der编码输出
derLen = i2d_PKCS7(p7,&derTmp);
BIO_free(p7bio);
PKCS7_free(p7);
//解P7数字信封的代码:
//der编码转换为PKCS7结构体
int derP7EnvelopedDataLen = derLen;
PKCS7* v_p7 = NULL;
PKCS7* v_p7_tmp = d2i_PKCS7(&v_p7,&der,derP7EnvelopedDataLen);
//解析出原始数据, evp_key:接收者私钥,x509_cert:接收者证书
BIO * v_p7bio_tmp = BIO_new(BIO_s_file());
BIO * v_p7bio = PKCS7_dataDecode(v_p7,priKey,NULL,x509_Cert);
//从BIO中读取原始数据,将得到"How are you!"
unsigned char src[4096];
int srcLen = BIO_read(v_p7bio,src,4096);
printf("nsrc = %s",src);
if (!strcmp(instr,src))
{
printf(" n ssl_PKCS7_get_Enveloped_data ok !!n");
}
BIO_free(v_p7bio);
PKCS7_free(v_p7);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
你好!!!请问一下封装为数字信封是怎么封装的???谢谢!!!
我的搞定了
BIO_write(p7bio,instr,strlen(instr));
printf("instr = %s",instr);
BIO_flush(p7bio); //添加这个,作用应该是将文件指针指向开始
//完成数字信封的运算
PKCS7_dataFinal(p7, p7bio);
嗯嗯,解决啦,非常感谢!
兄弟这个解决没?
这么没人回复呀。。。希望高手帮看下哦!