Ich entwickle eine Android-App, und ich brauche java Signature
class für die Datenauthentifizierung.SHA256 mit RSA-Signatur gibt verschiedene Ausgaben auf verschiedenen Android-Geräten zurück
Auf jedem Android-Gerät kann ich Daten signieren und ihre Signatur verifizieren. Bei einem bestimmten Datenblock zum Unterschreiben, einem bestimmten Modul, einem bestimmten privaten Exponenten und einem eindeutigen öffentlichen Exponenten sind die Ausgaben meiner Signaturen je nach Gerät unterschiedlich. Ich habe es mit einer Reihe von Geräten versucht, und ich bekomme die gleichen Signaturen für Android 3.2 und 3.2.1, aber ein anderes für ein Android 2.2.x-Gerät.
Ich berechne diese Signatur aus konstanten Feldern, die ich zuvor mit einer KeyFactory
mit RSA in einem Java-Projekt generiert. Die Schlüsselgröße ist 2048bit.
Hier ist ein Zitat des Codes, den ich benutze, um Signature und Verification zu invozieren.
public byte[] signData(byte[] data, PrivateKey privateKey) throws ... {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(data);
return signature.sign();
}
public boolean verifyData(byte[] data, byte[] sigBytes, PublicKey publicKey) throws ... {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicKey);
signature.update(data);
return signature.verify(sigBytes);
}
Wenn ich nicht irre, ist die Signatur mit SHA256 mit RSA deterministisch. Wie kann ich ein solches Verhalten erklären? Eine weitere interessante Frage, wie könnte ich diese Arbeit cross-Geräte machen, d. H. Die Signaturen wären gleich, egal welches Gerät ich verwende?
Vielen Dank im Voraus, Franck!
Der Code sieht richtig aus, obwohl das Einfügen der Fehlerhandler kaum erforderlich war. Stellen Sie sicher, dass der Schlüssel und die zu signierenden Daten identisch sind. –
@SevaAlekseyev Ja, ich bin mir sicher, dass alle Eingänge meines Systems gleich sind. Ich habe sie hart als statisches Finale in einer Klasse codiert, die diese Konstanten enthält. Ich habe die konstanten Werte nicht mit Bequemlichkeit verknüpft. – franckysnow
Debug Schritt für Schritt. Berechnen Sie zuerst SHA256-Hashes auf all diesen Plattformen und vergleichen Sie diese. –