用java签名和用cryptoapi签名生成的数据的相互验证

本文介绍了如何使用Java的BouncyCastle库验证由CryptoAPI的CryptSignHash方法生成的PKCS#7格式签名数据。通过CMSSignedData类实现签名数据的验证,并展示了如何使用CMSSignedDataStreamGenerator生成PKCS#7结构的签名数据。同时,文中提到了如果验证CryptoAPI生成的PKCS#1签名数据,需要在Java验证时额外添加一个null byte。
摘要由CSDN通过智能技术生成
 cryptoapi的CryptSignHash方法签名生成的数据是pkcs#7格式的,java中通过bouncycastle的CMSSignedData可以实现pkcs#7格式签名数据的验证,利用CMSSignedData签名生成pkcs#7格式数据。代码如下:
     /** 
     * 验证pkcs7格式的签名数据
     * 
@param signedData pkcs7格式的签名数据
     * 
@return 验证结果
     * 
@throws Exception
     
*/

    
public   boolean  verify( byte [] signedData)  throws  Exception ... {
        CMSSignedData sign 
= new CMSSignedData(signedData);
        CertStore certs 
= sign.getCertificatesAndCRLs("Collection""BC");
        SignerInformationStore signers 
= sign.getSignerInfos();
        Collection c 
= signers.getSigners();
        Iterator it 
= c.iterator();
        
boolean  bresult = true;
        
//当有多个签名者信息时需要进行全部验证
        while (it.hasNext()) ...{
            SignerInformation signer 
= (SignerInformation) it.next();
            Collection certCollection 
= certs.getCertificates(signer.getSID());
            Iterator certIt 
=
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值