[英]Signing pre-created digest using SunMSCAPI
摘要在一个服务器上创建,并传递给另一台服务器以使用令牌/加密狗进行签名。 密码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);
但是,在将密码API与SunMSCAPI提供程序一起使用时,私钥被视为公钥,既不询问令牌密码,也不产生生成的签名验证。 另外,使用带有私钥的密码不是正确的方法(也在此处讨论-https: //bugs.openjdk.java.net/browse/JDK-7050158 )。
如何在避免再次创建摘要的同时使用Signature API? “ NONEWithRSA”收到的输出不正确,因为我的摘要是“ Sha-256”,并且签名验证将失败。
尝试读取SunMSCAPI的源代码。 在使用“ NONEWithRSA”时,它根据摘要长度查找摘要类型。 对于签名,必须对摘要信息(AlorithmId + Digest)进行签名,因此传递给Signature API的数据大于摘要长度,并且SunMSCAPI会引发传递的摘要不支持的数据长度错误。
对于“签名”来说,它无法与SunMSCAPI提供程序一起使用预先创建的摘要。 虽然同样适用于Pkcs11提供程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.