Как сделать «MessageDigest SHA-1 и Signature NONEwithRSA» эквивалентным «Signature SHA1withRSA»
Я заинтересован в применении хэша SHA-1 с подписью RSA к некоторым данным, но мне нужно сделать это в два этапа - сначала применить хеш, а затем подписать данные. Похоже, что функция Signature.sign () создает более сложную (ASN.1?) Структуру данных, которая в конечном итоге подписана (см.этот вопрос). Как я могу сделать два эквивалентных без использования каких-либо внешних библиотек, таких как 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, но для проверки я требую, чтобы подписанные данные имели тот же формат, что и унаследованные данные.