Conversion Ansi.

Résolu/Fermé
Kenny19 Messages postés 5 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 15 décembre 2013 - 31 mai 2013 à 13:05
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 31 mai 2013 à 19:29
Bonjour,

Je fais en ce moment pour m'amuser un petit programme de cryptage et je souhaite afficher dans un fichier texte le message crypté.

Seulement, un problème vient : vu que c'est windows et que si j'ai bien compris, il utilise le langage ANSI. Et vu que je demande un transfert de caractère (ou copie) dans un fichier texte a la fin de mon programme java, j'en déduis qu'il y a une conversion a faire pour réussir a le lire dans le fichier .txt.

La raison de cette question est simple, je fais apparaître des caractères intervenant l'ascii étendu (ou autre) de java et windows semble ne pas l'aimer vu qu'il ne connait que l'ansi et l'ansi > 128.

Donc est ce que quelqu'un connait-il le moyen de convertir les caractères que je fais dans java (eclipse) en Ansi sur le .txt ?

Cordialement.

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 31/05/2013 à 18:58
Si tu veux lire ton fichier texte (ce qui n'a pas énormément d'intérêt si c'est crypté) il va falloir utiliser des caractères lisibles. Or l'ANSI comporte un certain nombre de caractères non affichables ou qui changent d'un système d'exploitation à l'autre (par exemple les accents)

Ce qu'il faudrait faire c'est utiliser uniquement des caractères communs à (presque) tous les encodages, c'est à dire les chiffres et les lettres sans accent (minuscule et/ou majuscule)

Après, ça dépend comment tu fais ton "cryptage", mais en général on est amené à faire des calculs sur des valeurs entières très grandes et donc passer par la classe BigInteger. Celle-ci dispose notamment de méthodes qui permettent d'écrire un entier en base "quelconque", au maximum en base 36 (10 chiffres et 26 lettres minuscules), ce qui permet de résoudre le problème facilement.

BigInteger n = BigInteger.valueOf(1234567890);
System.out.println(n);

String s = n.toString(36);
System.out.println(s); // kf12oi

BigInteger m = new BigInteger(s,36);
System.out.println(m);
La confiance n'exclut pas le contrôle
0
Kenny19 Messages postés 5 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 15 décembre 2013
31 mai 2013 à 19:24
J'utilise le ou exclusif comme méthode de cryptage, il est vrai que voir du texte crypté n'est pas intéressant mais dans le cas ou on souhaite ensuite le décrypté, là c'est intéressant de l'avoir le fichier crypté ^^

Sinon au pire des cas j'ajoute une petite soustraction de 127 histoire de ne pas utilisé l'ascii étendue et je le retrouve dans mon programme en rajoutant ce 127 ^^

Merci de ton aide , je vais essayé de me débrouiller ^^
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
31 mai 2013 à 19:29
Et bien avec BigInteger tu peux construire un entier connaissant un byte[] (que tu lis dans ton fichier), il y a également une méthode xor pour faire le ou exlusif, et après pour la conversion en lettres j'ai déjà expliqué... Bref, BigInteger peut-être une idée. Voici sa documentation :

https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html
0