我想创建一个signedandenvelopeddata
(PKCS#7)数据,使用Bouncy Castle(1.59版)实现。
在Bouncy Castle中,CMSOBjectIdentifiers
接口包括SignedAndEnvelopedData
类型。
然而,当尝试多次时,却无法正确创建。你能给我一些建议吗?下面是我的核心实现
CMSTypedData msg = (CMSTypedData) new CMSProcessableByteArray(
new ASN1ObjectIdentifier(CMSObjectIdentifiers.data.getId()),
srcMsg.getBytes(charSet));
Store certs = new JcaCertStore(certList);
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
ContentSigner signer = new JcaContentSignerBuilder(
signatureSchema).setProvider("BC").build(privateKey);
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder().setProvider("BC")
.build()).build(signer, cerx509));
gen.addCertificates(certs);
CMSSignedData sigData = gen.generate(msg, true);
sigData = new CMSSignedData(msg,sigData.getEncoded())
return sigData.getEncoded()
在这里,我将cmstypedata
的输入数据设置为cmsobjectedentifiers.data.getid()
CMSTypedData msg = (CMSTypedData) new CMSProcessableByteArray(
new ASN1ObjectIdentifier(CMSObjectIdentifiers.data.getId()),
srcMsg.getBytes(charSet));
CMSTypedData msg = new CMSProcessableByteArray(new ASN1ObjectIdentifier(CMSObjectIdentifiers.signedAndEnvelopedData.getId()),srcMsg.getBytes(charSet));
CMSEnvelopedDataGenerator edGen = new CMSEnvelopedDataGenerator();
JcaAlgorithmParametersConverter paramsConverter = new JcaAlgorithmParametersConverter();
edGen.addRecipientInfoGenerator(
new JceKeyTransRecipientInfoGenerator(cert,paramsConverter.getAlgorithmIdentifier(PKCSObjectIdentifiers.id_RSAES_OAEP,OAEPParameterSpec.DEFAULT))
.setProvider(new BouncyCastleProvider()));
OutputEncryptor encryptor = new JceCMSContentEncryptorBuilder(CMSAlgorithm.AES256_CBC)
.setProvider(new BouncyCastleProvider())
.build()
CMSEnvelopedData ed = edGen.generate(msg,encryptor)
encryptedContent = ed.getEncoded()
String result = new String(Base64.encode(ed.getEncoded()));
return result;
在这里,我将cmStypedData
的输入数据设置为cmsObjectEntifiers.SignedAndEnvelopedData.getID()
CMSTypedData msg = new CMSProcessableByteArray(new ASN1ObjectIdentifier(CMSObjectIdentifiers.signedAndEnvelopedData.getId()),srcMsg.getBytes(charSet));
问题:
SignedAndeneVloped
signedandenevloped
数据的步骤是否正确?我刚刚在XMLSignatrure(SignedAndEnevloped)中编写了一个关于使用Bouncy CALTE提供程序执行RSA的演示,请参阅本文https://honwhy.wang/2018/09/07/use-bc-provider-xmlSignature/
演示代码,
1,https://github.com/honwhy/xml-sec/blob/master/src/main/Java/com/honey/xmlsec/bcsignaturealgorithm.Java#L37
2,https://github.com/honwhy/xml-sec/blob/master/src/main/Java/com/honey/xmlsec/myutil.Java#L107
也许你需要一些线路来满足你的要求。
我正在消耗一个外部API,它返回给我一个河豚加密的JSON数组。首先,我试图使用BountyCastle包实现Blowfish加密/解密方法,该包基于这篇文章c#Bouncy Castle Blowfish Decryption-Pad块损坏。 现在我想解密API响应。Api返回给我以下Blowfish加密的JSON正文内容 $-1$cb8ba9e30b19ff2a$d1157421764fe50
我正在一个项目中使用SSHJ库。SSHJ库使用bouncycastle加密。 在eclipse中一切都很好,但是在我使用one-jar将所有内容打包到单个jar包中之后,我面临着bouncyCastle lib的问题。bcprov-jdk15on-1.51.jar包含在 /lib的JAR包中,所有其他库以及例如sshj.jar. 在日志上,我有这些: 未找到Security Provider类or
我有一个Web服务,它是一个数字签名(验证pdf,签名pdf)我正在使用库bcpkix-jdk15on-1.54.jar,bcprov-jdk15on-1.54.jar,itextpdf-5.4.0.jar.和作为Weblogic 12c12.2.1.2应用服务器当我在本地测试服务时,一切正常,但当在服务器上测试时,服务返回:java.lang.ClassNotFoundException:org
我有一个使用BouncyCastle作为安全提供者的应用程序,但是我想切换到另一个直接使用OpenSSL(consecrypt)的应用程序。我遇到的问题是,我正在使用BouncyCastle提供的密钥生成器中的ECDH“密钥”,但在我的其他库中没有类似的密钥生成器。 为了比较这两者,我将使用两种方法解码这些点,输入如下- 为提高可读性而添加换行符 使用BouncyCastle方法- 返回的是。返回