OpenSSL库验证PKCS7签名
使用Crypto库签名和验证签名请参考Crypto库实现PKCS7签名与签名验证,可以使用OpenSSL库验证Crypto签名,OpenSSL验证签名可使用简单的代码描述如下:
- //signature_msg为PKCS7签名串
 
- int Openssl_Verify(unsigned char* signature_msg,unsigned int length)
 - {
 - unsigned char message[1024];
 - int message_length = 0;
 - const unsigned char* p_signature_msg = signature_msg; //这里很重要,不然会修改signature_msg指针地址导致释放出问题
 - //DER编码转换为PKCS7结构体
 - PKCS7* p7 = d2i_PKCS7(NULL,&p_signature_msg,length);
 - if (p7 == NULL)
 - {
 - printf("error.\n");
 - return 0;
 - }
 - //解析出原始数据
 - BIO *p7bio= PKCS7_dataDecode(p7,NULL,NULL,NULL);
 - //从BIO中读取原始数据,这里是明文
 - dwMessageLen = BIO_read(p7bio,message,1024);
 - //获得签名者信息stack
 - STACK_OF(PKCS7_SIGNER_INFO) *sk = PKCS7_get_signer_info(p7);
 - //获得签名者个数,可以有多个签名者
 - int signCount = sk_PKCS7_SIGNER_INFO_num(sk );
 - for (int i = 0;i < signCount;i++)
 - {
 - //获得签名者信息
 - PKCS7_SIGNER_INFO *signInfo = sk_PKCS7_SIGNER_INFO_value(sk,i);
 - //获得签名者证书
 - X509 *cert= PKCS7_cert_from_signer_info(p7,signInfo);
 - //验证签名
 - if (PKCS7_signatureVerify(p7bio,p7,signInfo,cert) != 1)
 - {
 - printf("signature verify error.\n");
 - return 0;
 - }
 - }
 - return 1;
 - }
 
OpenSSL库验证PKCS7签名的更多相关文章
- Crypto库实现PKCS7签名与签名验证
		
在windows中,可以直接使用微软提供的crypto库实现PKCS7签名与签名验证.签名接口函数为CryptSignMessage,其接口定义为: BOOL WINAPI CryptSignMess ...
 - [加密]openssl之数字证书签名,CA认证原理及详细操作
		
转自:http://blog.sina.com.cn/s/blog_cfee55a70102wn3h.html 1 公钥密码体系(Public-key Cryptography) 公钥密码体系,又称非 ...
 - Linux下C语言使用openssl库进行加密
		
在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...
 - 使用Python Openssl库解析X509证书信息
		
X.509 证书结构描述 常见的X.509证书格式包括: 后缀 作用 cer/crt 用于存放证书,它是2进制形式存放的,不含私钥 pem 以Ascii来表示,可以用于存放证书或私钥. pfx/p12 ...
 - Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
		
前言 Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持.. OpenSSL 介绍 OpenSSL是一个开放源代码的软件库包,应用程序可 ...
 - 使用openssl库实现RSA、AES数据加密
		
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...
 - 使用openssl库实现des,3des加密
		
原文地址: 使用openssl库实现des,3des加密 主要是调整了一下格式,以及一些变量的类型,以解决在VC2008下无法编译通过的问题. #include <stdio.h> #in ...
 - [转]使用openssl库实现RSA、AES数据加密
		
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...
 - ubuntu16.04 apt-get update出错:由于没有公钥,无法验证下列签名
		
问题: W: 校验数字签名时出错.此仓库未被更新,所以仍然使用此前的索引文件.GPG 错误:https://packagecloud.io/github/git-lfs/ubuntu xenial I ...
 
随机推荐
- hadoop权威指南 读书笔记
			
1 数据库和MapReduce对比 2 hadoop 包含的内容
 - 前端学习资源(js)
			
JavaScript JavaScript | MDN JavaScript 秘密花园 JavaScript 标准参考教程(alpha) 给 JavaScript 初心者的 ES2015 实战 Col ...
 - Python 如何跳出多重循环
			
Python 如何跳出多重循环 抛异常 return
 - postgresql存储二进制大数据文件
			
如果想把整个文件或图片存储在数据表的一个字段内,该字段可以选择二进制类型,然后将文件按二进制存储起来,文本文件也可以存在text字段内. 示例如下: 二进制类型bytea的操作(在最大值内,有内存限制 ...
 - 万恶的VS2010 快捷键
			
此随笔用来记录VS的快捷键: 1.ctrl + U :将选定行中的大写置换为小写: 2.ctrl + K,ctrl + C :注释选定行: 3.ctrl + K,ctrl + U :取消注释选定行:
 - Junit单元测试细节
			
1.中心思想: 单元测试不是证明你对,而是证明你没错 2.基本注解应用 注解 使用环境 @Test 标志这个方法需要单元测试 @BeforeClass 在所有单元测试方法前执行 ps:需要是stati ...
 - Codeforces Round #313 (Div. 2) A B C 思路 枚举 数学
			
A. Currency System in Geraldion time limit per test 2 seconds memory limit per test 256 megabytes in ...
 - [转] JAVA网站高并发解决方案
			
http://blog.csdn.net/herrapfel/article/details/9630911
 - Linux 的账号与群组[转自vbird]
			
Linux 的账号与群组 管理员的工作中,相当重要的一环就是『管理账号』啦!因为整个系统都是你在管理的, 并且所有一般用户的账号申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个服务 ...
 - Nginx-/etc/sysctl.conf 参数解释
			
来自<深入理解Nginx模块开发与架构解析> P9 #表示进程(例如一个worker进程)可能同时打开的最大句柄数,直接限制最大并发连接数 fs. #1代表允许将状态为TIME-WAIT状 ...