Ich möchte nur den öffentlichen Schlüssel von einem byte[]
erstellen.
Ich habe das als Experiment versucht:
%Vor%Aber die Entschlüsselung mit diesem Schlüssel schlägt fehl.
Ich habe auch versucht, den Schlüssel mit ObjectOutputStream
zu serialisieren, aber die Serialisierung schlägt fehl.
java.io.NotSerializableException: org.apache.harmony.xnet.provider.jsse.OpenSSLKey
Ich lese hier , dass ich nicht verwenden kann SecretKeySpec
mit RSA.
Solange Sie also von einem SecretKey und nicht von einem RSA- oder DSA-Schlüssel sprechen, müssen Sie keine Verzerrungen mit KeyGenerator o.ä.
Jeder weiß, wie man diese Verrenkungen durchführt oder wie man das macht.
Asymmetrische Schlüssel wie die von RSA werden normalerweise im X509-Format gespeichert. Daher können Sie stattdessen X509EncodedKeySpec
verwenden.
Ein einfaches Beispiel ist bereits im Java 7 JavaDoc (einfach DSA durch RSA ersetzen): Ссылка
%Vor% Wenn Sie das private von byte[]
deserialisieren müssen, habe ich festgestellt, dass Sie PKCS8EncodedKeySpec
verwenden müssen.
Hängt davon ab, was Sie mit der serialisierten Darstellung machen wollen. Wenn der Verbraucher niemand anderes als Ihr eigenes Programm ist, können Sie Ihre eigene Implementierung erstellen. Ein öffentlicher RSA-Schlüssel besteht aus zwei ganzen Zahlen - Exponent und Modul. Der Modul ist groß - etwa 1024 Bits, der Exponent liegt typischerweise in der Größenordnung von 17 Bits. Beide sind als BigInteger
-Objekte verfügbar, wenn Sie Ihr öffentliches Schlüsselobjekt auf RSAPublicKey
umwandeln.
Also, zur Erinnerung:
%Vor%Das reicht aus, um den Schlüssel wiederherzustellen. Deserialisieren:
%Vor%Wenn der Schlüssel an Software von Drittanbietern weitergegeben werden muss, sollten Sie besser in ein Standardformat - PEM oder DER - serialisieren.
Tags und Links java