在Java中,我試圖簽下與充氣城堡和本說明書中的證書一個byte [](這是我SHA256消化我的文檔):在Java中,數字簽名與BouncyCastle的
第14.1.4.1.1節數字簽名的生成。
我在有彈性的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 1.5規範要求的。我必須手動添加填充嗎?和RSA256的OID?
任何理由不使用'java.security'的API? – martijno
沒理由,你是對的。 – Baptiste