使用Crypto库签名和验证签名请参考Crypto库实现PKCS7签名与签名验证,可以使用OpenSSL库验证Crypto签名,OpenSSL验证签名可使用简单的代码描述如下:

  1. //signature_msg为PKCS7签名串
  1. int Openssl_Verify(unsigned char* signature_msg,unsigned int length)
  2. {
  3. unsigned char message[1024];
  4. int message_length = 0;
  5. const unsigned char* p_signature_msg = signature_msg; //这里很重要,不然会修改signature_msg指针地址导致释放出问题
  6. //DER编码转换为PKCS7结构体
  7. PKCS7* p7 = d2i_PKCS7(NULL,&p_signature_msg,length);
  8. if (p7 == NULL)
  9. {
  10. printf("error.\n");
  11. return 0;
  12. }
  13. //解析出原始数据
  14. BIO *p7bio= PKCS7_dataDecode(p7,NULL,NULL,NULL);
  15. //从BIO中读取原始数据,这里是明文
  16. dwMessageLen = BIO_read(p7bio,message,1024);
  17. //获得签名者信息stack
  18. STACK_OF(PKCS7_SIGNER_INFO) *sk = PKCS7_get_signer_info(p7);
  19. //获得签名者个数,可以有多个签名者
  20. int signCount = sk_PKCS7_SIGNER_INFO_num(sk );
  21. for (int i = 0;i < signCount;i++)
  22. {
  23. //获得签名者信息
  24. PKCS7_SIGNER_INFO *signInfo = sk_PKCS7_SIGNER_INFO_value(sk,i);
  25. //获得签名者证书
  26. X509 *cert= PKCS7_cert_from_signer_info(p7,signInfo);
  27. //验证签名
  28. if (PKCS7_signatureVerify(p7bio,p7,signInfo,cert) != 1)
  29. {
  30. printf("signature verify error.\n");
  31. return 0;
  32. }
  33. }
  34. return 1;
  35. }

OpenSSL库验证PKCS7签名的更多相关文章

  1. Crypto库实现PKCS7签名与签名验证

    在windows中,可以直接使用微软提供的crypto库实现PKCS7签名与签名验证.签名接口函数为CryptSignMessage,其接口定义为: BOOL WINAPI CryptSignMess ...

  2. [加密]openssl之数字证书签名,CA认证原理及详细操作

    转自:http://blog.sina.com.cn/s/blog_cfee55a70102wn3h.html 1 公钥密码体系(Public-key Cryptography) 公钥密码体系,又称非 ...

  3. Linux下C语言使用openssl库进行加密

    在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...

  4. 使用Python Openssl库解析X509证书信息

    X.509 证书结构描述 常见的X.509证书格式包括: 后缀 作用 cer/crt 用于存放证书,它是2进制形式存放的,不含私钥 pem 以Ascii来表示,可以用于存放证书或私钥. pfx/p12 ...

  5. Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化

    前言   Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持..   OpenSSL 介绍   OpenSSL是一个开放源代码的软件库包,应用程序可 ...

  6. 使用openssl库实现RSA、AES数据加密

         openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...

  7. 使用openssl库实现des,3des加密

    原文地址: 使用openssl库实现des,3des加密 主要是调整了一下格式,以及一些变量的类型,以解决在VC2008下无法编译通过的问题. #include <stdio.h> #in ...

  8. [转]使用openssl库实现RSA、AES数据加密

    openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...

  9. ubuntu16.04 apt-get update出错:由于没有公钥,无法验证下列签名

    问题: W: 校验数字签名时出错.此仓库未被更新,所以仍然使用此前的索引文件.GPG 错误:https://packagecloud.io/github/git-lfs/ubuntu xenial I ...

随机推荐

  1. Ubuntu Vim 复制到系统粘贴板

    /************************************************************************* * Ubuntu Vim 复制到系统粘贴板 * 说 ...

  2. 帝国cms相关调用

    Loop用法:[!--temp.header--] [e:loop={6,6,0,1}] <!--标题连接/标题--> <a href="<?=$bqsr[title ...

  3. archlinux下查看机器的ip地址

    问题原因 默认archlinux没有安装ifconfig这个在其它发行版中常用的命令,刚开始不知道怎么查看机器的ip. 解决方案 使用archlinux中已经安装的ip命令.在后面跟上addr, ro ...

  4. Jquery attr判断服务器单选按钮失败

    在项目中用 jquey的attr方法获取服务器控件的单选按钮checked属性会不成功, 单选选中改变,用attr获取不到最新的值,但是用 $("#rdbPartySend").i ...

  5. Linux启动Apache支持.htaccess伪静态文件方法

    第一.编辑httpd.conf文件 A - 在etc/httpd/conf/目录下的httpd.conf 文件,找到: LoadModule rewrite_module modules/mod_re ...

  6. Ubuntu系统的修改Hosts

    1.修改hostssudo gedit /etc/hosts2.添加解析记录( . )完整案例:127.0.0.1 localhost.localdomain localhost简洁记录:127.0. ...

  7. 104. Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  8. Codeforces Round #372 (Div. 2) A B C 水 暴力/模拟 构造

    A. Crazy Computer time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  9. VPS 搭建 SS

    推荐 VPS:http://www.vultr.com/?ref=6915101 1.连接 VPS 运行命令 ssh root@xx.xx.xx.xx -p 22 // vultr 的端口为 22 然 ...

  10. <初级程序员> git 的初级使用

    作为程序员,Git 是一个很好的代码管理工具.Git 是一个版本控制系统,主要的作用就是记录代码的修改过程,有效的追踪文件的变化.当代码出现错误的时候可以很容易的恢复到之前的状态,不管对于个人开发还是 ...