De plus, si je veux enregistrer la clé, je dois la transfrmer en String? cependant il m'affiche une valeurs bizarre:
javax.crypto.spec.SecretKeySpec@26850376
1 - Si tu veux enregistrer une clef, utilise un magasin. (cf KeyStore)
2 - La javax.crypto.etc... n'est pas une valeur bizarre, c'est le toString() de ton pointeur (de ta référence si tu préfères) et pas le toString() de la valeur de ta clef.
Pareil cette ligne :
writer.write(texte_crypte.toString());
Je la trouve bizarre. Si tu veux convertir un tableau de byte en String tu fais une simple instanciation :
String s = new String(mon_tableau_de_byte[]);
C'est peut être à ce niveau que se situe ton problème de padding car tu crois enregistrer ton texte chiffré mais en fait tu dois enregistrer quelque chose comme java.lang.String@156165131
En clair tu devrais revoir le sens de la méthode toString().
Autre chose :
return new String(cipher.doFinal(text), "UTF8");
Cette ligne est problématique. Elle ne signifie pas ce que tu penses, c'est à dire que la chaine en mémoire est (sera) au format UTF8, elle dit à ton instance de String d'interpréter le résultat de ciphier.doFinal(text) comme de l'UTF-8. Seulement peut être que tu ne l'enregistres pas dans ce charset (surement pas même si tu es sur Windows). Ceci parce que toutes les String en mémoire en Java sont en UTF-16 et elles ne sont converties dans un autre encodage que lors de l'écriture (ou de la lecture) d'un flux quelconque (Fichier, socket, etc ...)
Partager