0
在一台服务器上创建摘要,并将其传递到另一台服务器以使用标记/软件狗进行签名。密码API可与PKCS11 prvoider正常工作。使用SunMSCAPI签署预先创建的摘要
Cipher c = Cipher.getInstance("RSA");
c.init(Cipher.ENCRYPT_MODE, pk);
DigestInfo di = new DigestInfo(new DefaultDigestAlgorithmIdentifierFinder().find("SHA-256"), hash);
byte[] digestInfo = di.getEncoded();
byte[] data = c.doFinal(digestInfo);
但在使用与SunMSCAPI提供商的API加密,私钥被视为公共密钥,既不令牌密码要求和产生的签名验证失败。同时使用私钥密码不是正确的方法(这里也讨论 - https://bugs.openjdk.java.net/browse/JDK-7050158)。
如何在避免使用摘要创建的同时使用Signature API? “NONEWithRSA”收到的输出将不正确,因为我的摘要是“Sha-256”,并且签名验证将失败。
由于SunMSCAPI中的错误,我使用SunMSCAPI到RSA的最后一次试验加密先前计算的摘要并没有完成。我建议使用其他加密提供商或使用Signature.sign并让SunMSCAPI计算摘要 – pedrofb
@pedrofb感谢您的回答。我应该使用什么开源提供商的建议?由于SunPkcs11不适用于Windows版本(如此处所述:https://stackoverflow.com/a/28643362/5285640)。 –
不,我不能建议替代提供者。但是,如果可以,请使用标准签名方法而不是使用hash + oid +加密,因为它存在问题 – pedrofb