【问题标题】:Convert message and signature to BouncyCastle CMSSignedData object将消息和签名转换为 BouncyCastle CMSSignedData 对象
【发布时间】:2012-11-11 04:19:14
【问题描述】:

我有一个 X509CertificateObject,一个匹配的 RSAPublicKey,并设法创建一个字节数组,其中包含一些消息对象的有效数字证书,也是一个字节数组。

不幸的是,我构建的系统只接受CMSSignedData 对象作为输入。 如何将我的基本构建块转换成这样一个有效的CMSSignedData 对象?

背景:我正在根据this example(摘要为 SHA512)试验 Java Bouncy Castle RSA 盲签名,需要将结果输入标准签名处理。

【问题讨论】:

    标签: java rsa digital-signature bouncycastle pkcs#7


    【解决方案1】:

    首先,您可能希望使用私钥对数据进行签名。这个想法是签名应该是只有你可以创建的东西。你知道其余的应该如下:

    
    X509Certificate signingCertificate = getSigningCertificate();
    //The chain of certificates that issued your signing certificate and so on
    Collection&ltX509Certificate&gt certificateChain = getCertificateChain();
    PrivateKey pk = getPrivateKey();
    byte[] message = "SomeMessage".getBytes();
    
    CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
    certificateChain.add(signingCertificate);
    generator.addCertificates(new CollectionStore(certificateChain));
    
    JcaDigestCalculatorProviderBuilder jcaDigestProvider = new JcaDigestCalculatorProviderBuilder();
    jcaDigestProvider.setProvider(new BouncyCastleProvider());
    JcaSignerInfoGeneratorBuilder singerInfoGenerator = new JcaSignerInfoGeneratorBuilder(jcaDigestProvider.build());
    
    AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA1withRSA");
    AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
    AsymmetricKeyParameter privateKeyParam = PrivateKeyFactory.createKey(pk.getEncoded());
    ContentSigner cs = new BcRSAContentSignerBuilder(sigAlgId, digAlgId).build(privateKeyParam);
    
    SignerInfoGenerator sig = singerInfoGenerator.build(cs, signingCertificate);
    generator.addSignerInfoGenerator(sig);
    
    CMSSignedData data = generator.generate(new CMSProcessableByteArray(message), true);
    

    【讨论】:

      猜你喜欢
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多