我有興趣將SHA-1哈希與RSA簽名應用於某些數據,但我需要分兩步執行 - 應用哈希首先簽署數據。 Signature.sign()函數似乎創建了一個最終簽名的更復雜(ASN.1?)數據結構(請參見this question)。如何在不使用任何外部庫如BouncyCastle的情況下創建這兩個等價物?如何使「MessageDigest SHA-1和簽名NONEwithRSA」等效於「簽名SHA1withRSA」
應用散列,並與簽名單步登錄:
PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null);
...
sig = Signature.getInstance("SHA1withRSA", "SunMSCAPI");
sig.initSign(privatekey);
sig.update(data_to_sign);
byte[] bSignedData_CAPISHA1_CAPIRSA = sig.sign();
通過消息摘要應用散列,然後用簽名來簽署:
PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null);
...
MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
byte[] data_to_sign = sha1.digest(bdataToSign);
Signature sig = Signature.getInstance("NONEwithRSA", "SunMSCAPI");
sig.initSign(privatekey);
sig.update(data_to_sign);
byte[] bSignedData_JAVASHA1_CAPIRSA = sig.sign();
...
我要尋找以下等效:
bSignedData_JAVASHA1_CAPIRSA == bSignedData_CAPISHA1_CAPIRSA
我的最終目標是創建散列,然後用PKCS11令牌簽名,bu t爲了驗證目的,我要求籤名數據與傳統數據的格式相同。