Wie man “MessageDigest SHA-1 und Signature NONEwithRSA” zu “Signature SHA1withRSA” äquivalent macht

Ich möchte einen SHA-1-Hash mit RSA-Signatur auf einige Daten anwenden, muss dies jedoch in zwei Schritten tun - zuerst den Hash anwenden und dann die Daten signieren. Die Funktion Signature.sign () scheint eine komplexere (ASN.1?) Datenstruktur zu erstellen, die letztendlich signiert wird (siehediese Frage). Wie kann ich die beiden Äquivalente erstellen, ohne externe Bibliotheken wie BouncyCastle zu verwenden?

Hash anwenden und in einem Schritt mit Signatur unterschreiben:

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();

Übernehmen Sie den Hash via MessageDigest und unterschreiben Sie mit der Signatur:

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();
...

Ich suche nach folgender Äquivalenz:

bSignedData_JAVASHA1_CAPIRSA == bSignedData_CAPISHA1_CAPIRSA

Mein letztendliches Ziel ist es, den Hash zu erstellen und dann mit einem PKCS11-Token zu signieren. Ich fordere jedoch, dass die signierten Daten zu Überprüfungszwecken dasselbe Format wie die alten Daten haben.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage