Ich habe ein SecretkeySpec-Objekt erstellt, das einen 128-Bit-Schlüssel enthält. Ich möchte diesen Schlüssel in einem String haben (diese Zeichenfolge muss später wieder in den ursprünglichen Schlüssel eingefügt werden), also verwende ich Base64-Codierung.JAVA: 128-Bit-Schlüssel zu String-Problem und zurück
Dies ist, wie meine Schlüssel aus dem Byte-Array in Zeichen im Rohformat aussehen:
*P??? ?ukL|?~
Also nehme ich das Bytes und es so codieren.
byte[] okay = Base64.encode(eF.getSpec().getEncoded());
Jetzt, als ich es in Zeichen übersetze i erhalten:
S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=
Jetzt mag ich meinen Schlüssel wieder restauriert haben, um es von dem Base64 codiert Array ursprüngliches Format ist.
String dkey = "S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=";
byte[] key = null;
key = dKey.getBytes();
key = Base64.decode(key);
Jetzt, als ich das Ergebnis überprüfen i erhalten:
DKlDkp+kJ9nUFa0wZHyFfg==
statt:
*P??? ?ukL|?~
Wie Sie sehen dies ist nicht das Ergebnis, das ich zu sehen hoffte. Ich habe sicherlich einen Anfängerfehler gemacht, und vergib mir dafür, aber ich bin relativ neu im Programmieren. Ich würde es schätzen, wenn mir jemand ein funktionierendes Beispiel geben könnte, den den 128-Bit-Schlüssel zu und von lesbarem Format zu transformieren, und vielleicht eine Erklärung, wo ich falsch mit dem Denken ging.
Und ich entschuldige mich für Rechtschreibfehler, Englisch ist nicht meine Muttersprache.
Vielen Dank im Voraus
Was 'Base64' Klasse verwenden Sie? Ist es von der Apache Codec-Bibliothek? –
Was macht 'eF.getSpec(). GetEncoded()'? Ich sehe keinen ähnlichen Anruf im Decodierungsteil. – casablanca
@casablanca: Ich * nehme an * es ist die ['getEncoded()' Methode der 'SecretKeySpec' Klasse] (http://download.oracle.com/javase/1.4.2/docs/api/javax/crypto/spec /SecretKeySpec.html#getEncoded%28%29). Wenn das der Fall ist, sollte es einfach die rohen Bytes zurückgeben, die den Schlüssel darstellen. –