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