繁体   English   中英

使用SunMSCAPI签名预先创建的摘要

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM