Java,带BouncyCastle的数字签名
在Java中,我尝试使用bouncy castle和本规范中的证书对字节[](这是我文档的sha256摘要)进行签名:
在第14.1.4.1.1章数字签名生成中
我在bouncy的java文档中发现了以下方法:
public static byte[] signer(byte[] datas, Certificat cert) {
try {
List<X509Certificate> certList = new ArrayList<X509Certificate>();
CMSTypedData msg = new CMSProcessableByteArray(datas);
certList.add(cert.getCertificat());
Store certs = new JcaCertStore(certList);
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
ContentSigner sha256signer = new JcaContentSignerBuilder(
"SHA256withRSA").setProvider("BC").build(
cert.getPrivateKey());
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder().setProvider("BC")
.build()).build(sha256signer, cert.getCertificat()));
gen.addCertificates(certs);
CMSSignedData sigData = gen.generate(msg, true);
return sigData.getEncoded();
}
catch (Exception e) {
throw new RuntimeException(
"Erreur lors de la signature du document", e);
}
我不知道这个签名是否真的符合规范要求的PKCS#1.5。我必须手动添加填充吗?RSA256的OID呢
# 1 楼答案
EBICS签名A005是带有SHA-256摘要算法和PKCS#1 1.5填充的RSA签名。然而,您粘贴在这里的代码示例正在创建一个CMS签名,它使用“低级”RSA签名,但结构要复杂得多(有关全面的详细信息,请参阅RFC 5652http://www.rfc-editor.org/rfc/rfc5652.txt)
希望使用java crypto API生成您试图获取的签名非常简单: