Bas*_*lew 4 java bouncycastle digital-signature
在Java中,我尝试使用充气城堡和本规范中的证书签署一个byte [](这是我的文档的sha256摘要):
在第14.1.4.1.1节数字签名生成中.
我在bouncy的java doc中找到了这个方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
我不知道这个签名是否真的符合规范要求的PKCS#1 1.5.我是否必须手动添加填充?和RSA256的OID?
EBICS签名A005是具有SHA-256摘要算法和PKCS#1 1.5填充的RSA签名.但是,您在此处粘贴的代码示例是创建CMS签名,该签名使用"低级别"RSA签名,但结构要复杂得多(有关详细信息,请参阅RFC 5652 http://www.rfc-editor.org/rfc/ rfc5652.txt).
希望使用java加密API生成您尝试获取的签名非常简单:
public static byte[] signer(byte[] data, PrivateKey key) {
Signature signer = Signature.getInstance("SHA256WithRSA", "BC");
signer.initSign(key);
signer.update(data);
return signer.sign();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8508 次 |
| 最近记录: |