我有兴趣将带有RSA签名的SHA-1哈希应用于某些数据,但我需要分两步完成 – 首先应用哈希然后对数据进行签名. Signature.sign()函数似乎创建了一个最终签名的更复杂(ASN.1?)的数据结构(参见
this question).如何在不使用任何外部库(如BouncyCastle)的情况下制作两个等效文件?
使用签名应用哈希并签名:
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();
通过MessageDigest应用哈希,然后使用签名进行签名:
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令牌进行签名,但我要求签名数据与遗留数据的格式相同,以便进行验证.