所有!
我正在解决两个问题:
对于签名,我们使用Windows模块CryptoPro,因为它只在俄罗斯正式具有法律效力。我们的系统部署在俄罗斯一个地区的政府中。
我们的系统已经运行了5年,并且有许多生成的标志(全部由CAPICOM提供)。标志分离并持久存储在数据库中。
我们希望找到解决方案来验证java代码中的这些标志(包装在Applet中)。
我已尝试过下面的代码,但我找不到任何合适的方法来验证任何签名。此方法始终返回false。
public boolean verifyFile(String fileInput, String metadata, String base64Signature) throws Exception {
Security.addProvider(new BouncyCastleProvider());
byte[] signedContent = Base64.decode(base64Signature.getBytes("UTF-8"));
CMSSignedData cms7 = new CMSSignedData(signedContent);
CertStore certs = cms7.getCertificatesAndCRLs("Collection", "BC");
SignerInformationStore signers = cms7.getSignerInfos();
Collection c = signers.getSigners();
SignerInformation signer = (SignerInformation)c.iterator().next();
Collection certCollection = certs.getCertificates(signer.getSID());
Iterator certIt = certCollection.iterator();
X509Certificate cert = (X509Certificate)certIt.next();
Signature signature = Signature.getInstance("SHA1withRSA", "BC");
signature.initVerify(cert.getPublicKey());
String signedContentString = getSignedDataString(fileInput, metadata);
signature.update(signedContentString.getBytes("UTF-8"));
return signature.verify(signer.getSignature());
}
有人解决方案或已经遇到过这个问题