Как сделать «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, но для проверки я требую, чтобы подписанные данные имели тот же формат, что и унаследованные данные.

Ответы на вопрос(2)

Ваш ответ на вопрос