J'ai créé un objet SecretkeySpec qui contient une clé de 128 bits. Je voudrais avoir cette clé dans une chaîne (cette chaîne doit être remise dans la clé d'origine plus tard), donc j'utilise l'encodage Base64.JAVA: clé 128 bits vers un problème de chaîne et retour
Voici comment ma clé ressemble au format brut à partir du tableau d'octets en caractères:
*P??? ?ukL|?~
donc je prends les octets et codez comme ça.
byte[] okay = Base64.encode(eF.getSpec().getEncoded());
Maintenant, quand je traduis en caractères i get:
S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=
Maintenant, je veux avoir ma clé arrière restauré à son format d'origine des base64 tableau codées.
String dkey = "S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=";
byte[] key = null;
key = dKey.getBytes();
key = Base64.decode(key);
Maintenant, quand je vérifie le résultat que je reçois:
DKlDkp+kJ9nUFa0wZHyFfg==
au lieu de:
*P??? ?ukL|?~
Comme vous pouvez voir ce n'est pas le résultat que j'espérais voir. J'ai sûrement fait une erreur de novice, et pardonnez-moi pour cela mais je suis relativement nouveau à la programmation. J'apprécierais si quelqu'un pourrait me donner un exemple de transformation de la clé de 128 bits vers et depuis un format lisible, et peut-être une explication où j'ai eu tort de penser.
Et je m'excuse pour les fautes d'orthographe, l'anglais n'est pas ma langue maternelle.
Merci à l'avance
Quelle classe 'Base64' utilisez-vous? Est-ce à partir de la bibliothèque Apache Codec? –
Que fait 'eF.getSpec(). GetEncoded()'? Je ne vois pas un appel similaire dans la partie décodage. – casablanca
@casablanca: Je * présume * que c'est la méthode ['getEncoded()' de la classe 'SecretKeySpec'] (http://download.oracle.com/javase/1.4.2/docs/api/javax/crypto/spec /SecretKeySpec.html#getEncoded%28%29). Si c'est le cas, alors il devrait simplement retourner les octets bruts représentant la clé. –