Problème pour comparer deux chaines de charactère une UFT8 et une AINSI
Bonjour,
je patine : En gros :
>je créer un fichier texte dans lequel je stock une valeur crypté.
>Plus tard je lis une valeur crypté aussi de la même manière et je veux comparer ces deux valeurs.
Dans certains cas lorsque je génère une valeur crypté dans le fichier texte qui demande alors de l'enregistrer en UFT8 que j'accepte ou que je refuse ça m’empêche de comparer mes valeurs.
Ou plutôt les valeurs dans un system.out.println(); sont bien les même mais un equal ou un compare me dit que ces valeurs sont différentes....
un exemple de texte problématique :
Æ6óÊ)÷ßžª‰?‡³·[ñ¸ã
Dans ce cas le ? a été transformé car j'ai refusé de le laisser en UTF8 mais même si j'ai bien un point d’interrogation dans les deux chaines ça ne marche pas.
Si dessous mes bout de codes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
//pour faire la comparaison
if (ligne.toString().equals((seclicence.cryptervalue("password",mac()).toString())))
//le code pour faire le cryptage
public String cryptervalue(String password, String entree) {
private String algo = "Blowfish";
byte[] texteCrypte = null;
String strtexteCrypte = null;
try {
byte[] passwordInBytes = password.getBytes("ISO-8859-2");
Key clef = new SecretKeySpec(passwordInBytes, algo);
Cipher cipher = Cipher.getInstance(algo);
cipher.init(Cipher.ENCRYPT_MODE, clef);
byte[] texteClaire = entree.getBytes();
texteCrypte = cipher.doFinal(texteClaire);
strtexteCrypte = new String(texteCrypte);
}
catch (Exception e) {
System.out.println("Erreur lors de l'encryptage des donnees");
}
return strtexteCrypte;
} |
a vu des recherches que j'ai fait je penses que le problème vient du format de comparaison des chaines de caractère.
j'ai essayer de les unifier en les passant en byte[] avec un code de ce genre là mais sans succès.
Code:
1 2
|
byte[] test = test2.getBytes("UTF8"); |
Je suis preneur de votre aide :)
Merci à tous
Merci je dois pas être bien loin de la solution :)
Bonjour,
merci pour ton aide, en fait je veux comparer deux valeurs qu'elles soient en byte ou en string peu importe.
j'avais déjà essayer de faire ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public byte[] cryptervalueb(String password, String entree) {
byte[] texteCrypte = null;
String strtexteCrypte = null;
try {
byte[] passwordInBytes = password.getBytes("ISO-8859-2");
Key clef = new SecretKeySpec(passwordInBytes, algo);
Cipher cipher = Cipher.getInstance(algo);
cipher.init(Cipher.ENCRYPT_MODE, clef);
byte[] texteClaire = entree.getBytes();
texteCrypte = cipher.doFinal(texteClaire);
}
catch (Exception e) {
System.out.println("Erreur lors de l'encryptage des donnees");
}
return texteCrypte;
} |
pensant comparer directement les byte[]
mais si je lance :
Code:
1 2
|
System.out.println(seclicence.cryptervalueb("password","03-23-56")); |
j'obtiens à chaque fois des résultats différents!
[B@64f6106c
[B@553a3d88
etc...
du coup impossible de comparer des valeurs qui semble aléatoire.
Je suppose que ça doit être un truc du genre la référence en mémoire de la valeur ou un truc du genre que je récupère mais je ne sais pas comment récupérer ou comparer la valeur.
Je vais regarder le base64 je ne connais pas du tout.
merci en tout cas pour ton aide, :)
Bonne soirée.
fichier texte "classique"
J'avoue que ça ne veut pas dire grand chose "fichier texte classique" ce que je voulais dire c'est un fichier enregistré en format ansi avec des caractères uniquement présent sur le clavier nativement ?,% etc.
Entre temps j'ai refait ma méthode de cryptage en version fait maison plus basique. ça marche nickel maintenant.
je creuserais plus tard ce sujet, car j'ai trop de boulot pour y passer plus de temps en ce moment :(
Merci encore