【发布时间】:2017-06-16 08:20:04
【问题描述】:
摘要在一台服务器上创建并传递到另一台服务器以使用令牌/加密狗进行签名。密码 API 可与 PKCS11 prvoider 一起正常工作。
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 感谢您的回答。关于我应该使用哪个开源提供商的任何建议?由于 SunPkcs11 不适用于 Windows 版本(如此处所述:stackoverflow.com/a/28643362/5285640)。
-
不,我不能建议替代提供商。但是如果可以的话,使用标准的签名方式,而不是使用hash + oid + 加密,因为有问题
标签: java cryptography digital-signature mscapi