IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Encodage des caractère sous linux/windows


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Encodage des caractère sous linux/windows
    Bonjour, je rencontre un problème avec les caractères spéciaux et les deux systèmes linux et windows. EN faite je cherche à crypter une chaîne sous linux puis l'écrire dans un fichier (jusque la pas de problème). Ensuite je veux récupérer cette chaîne et la décrypter sous windows.

    Hors je me rend compte qu'en cryptant ma chaîne, le résultat n'est pas le même sous windows et sous linux.

    Quelqu'un saurait-il comment résoudre se problème? Est-ce seulement possible?

    Je vous mets ici mes fonctions de cryptage et de décryptage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    private String decrypter(String message,String password) {
            String rez = " ";
            int j =0;
            int temp;
     
            int lon = message.length();
            for(int i=0;i<lon;i++){
                temp = (message.charAt(i) - password.charAt(j));
                if (temp < 0) 
                {
                    temp = 256 + temp;
                }
                rez+=(char)temp;
                if (j == (password.length()-1)) 
                {
                    j= 0;
                }
                else 
                {
                    j=((j % (password.length())) + 1);
                    //Modulo pour parcourrir le mot de passe...
                }
            }
    	return rez;
        }
    //crypter
    public static String crypter(String message,String password) {
            String rez = " ";
            int j =0;
            int temp;
     
            int lon = message.length();
            for(int i=0;i<lon;i++){
                temp = (message.charAt(i) + password.charAt(j));
                if (temp > 255) 
                {
                    temp = temp-256;
                }
                rez+=(char)temp;
                if (j == (password.length()-1)) 
                {
                    j= 0;
                }
                else 
                {
                    j=((j % (password.length())) + 1);
                    //Modulo pour parcourrir le mot de passe...
                }
            }
    	return rez;
        }

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    J'ai pas tout compris sur ton cryptage/décryptage (enfin j'ai pas pris le temps ). Ce que je peux te dire c'est que vu ce que tu utilises, tu devrais avoir le même impact aussi bien sous Windows que Linux d'où ma question :

    Lorsque tu crypte/décrypte sur un même environnement (Windows -> Windows ou Linux -> Linux), retrouves tu ton String originel ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Oui je retrouve bin mon string d'origine si je crypte puis décrypte.
    Je n'ai aps tester linux, mais je vais essayé de suite

  4. #4
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    Normalement java travail en unicode donc un niveau de java il ne devrait pas y avoir de surprise, mais par contre lorsque tu crées le fichier il faut utiliser le même encodage coté linux et windows.
    Sinon ton alogo d'encodage n'est pas très pro, il y a les outils pour ça en java : encryptions DES (Cypher) ou Blowfish avec java.crypto

    exemple

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Ok, merci. Je vais regarder au niveau de l'encodage. mais le problème c'est que je vasi copier/coler le texte crypté qui est incrit dans le fichier. Donc il faut que je trouve comment dire à java de travailler avec avec un certain encodage (j'avais pensé l'utf-8).

    Et je vais regarder le fichier que tu m'a donnée.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    J'ai regarder ton code. Il me parais plus que bien. je vais me renségné un peut sur le focntionnemnt. Mais vu que se sont des chifres qui sont généré, je n'aurais pas de problème d'encodage.

    Encore merci !
    Il me reste plus qu'a réussire à faire fonctionner l'envoi de mail en java et la connexion ssh et j'aurais réussi ce que je voulais faire.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Finalement, j'ai un problème avec ta classe.

    C'est peut être un erruer bête mais bon.
    Si je convertie la chine crypter et la clé en String et que je les reconvertie en Bytes, cela ne fonctionne plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     public static void main(String[] args) {
        String plaintext = "bonjour";//args[0]
        System.out.println("plaintext = " + plaintext);
        MyBlowfish bf = new MyBlowfish();
        bf.generateKey();
        byte[] secretKey = bf.getSecretKeyInBytes();
        byte[] ciphertext = bf.crypt(plaintext);   
        System.out.println("ciphertext = " + ciphertext);
        System.out.println("cle = " + secretKey);
     
        String key = secretKey.toString();
        String crypter = ciphertext.toString();
        bf.setSecretKey(key.getBytes());
        String plaintext2 = bf.decryptInString(crypter.getBytes());
        System.out.println("plaintext2 = " + plaintext2);
        if (!plaintext2.equals(plaintext)) System.out.println("Error: plaintext2 != plaintext");
      }
    j'obient l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
    Exception in thread "main" java.lang.NullPointerException
    	at java.lang.String.<init>(String.java:593)
    	at MyBlowfish.decryptInString(MyBlowfish.java:94)
    	at MyBlowfish.main(MyBlowfish.java:114)
    Java Result: 1

  8. #8
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    Citation Envoyé par irumi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
    Traduction
    La taille du bloc n'est pas correcte.
    La longueur de l'entrée doit être un multiple de huit pour un algorithme de cryptage "padded" (pas réussi à trouver une traduction valable)

    Explication
    Un certain nombre d'algorithme fonctionne par "bloc" (padded cipher). L'entrée à décrypter doit donc avoir une taille qui est un multiple de la taille du "bloc".

    En général au cryptage l'algorithme gère lui-même le remplissage du vide manquant mais il en sort nécessairement une série "blocs", donc la taille de la sortie du cryptage est nécessairement un multiple de la taille du "bloc".

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    oui c'est ce que j'avasi cru comprendre.
    Ce que je ne comprend pas c'est pourquoi il y a cette erreur alors que je refournit la clé que le script m'a donnée.

    Mais apparament le proble vient de la transformation d'un tableau de byte en String puis en tableau de Byte.

    Le tableau de byte obtenu à la fin n'est pas le même que celui au début. je pensais pourtant que cette opération était révercible

  10. #10
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    le toString() d'un tableau de byte, je sais pas bien ce que ça fait... en générale c'est peut-être le référence qui est renvoyée...

    crypter.getBytes() dépend de la platforme est n'est pas à utiliser dans ce cas.
    et toString() ne s'utilise pas comme tu le pense, sur la plupart des tableau array, cela ne va pas concaténer le contenu de chaque élément...

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    merci beaucoup.

    Mais je pense que je vais abandonner car je n'arrive pas à concervé le même encodage pour windows et linux. les caractère sont tranformé et du coup j en'arrive pas à décrypter les messages

  12. #12
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    La méthode toString() d'un tableau renvoie la même chose que celle d'un Object. Un descripteur de classe et la "référence".

    Si tu veux transférer des caractères d'une machine à une autre, il faut utiliser le même encodage sur les deux machines. En Java il faut utiliser OutpuStreamWriter et InputStreamReader.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    ok, donc je ne peut pas ecrire dans un fichier avec un certain type d'encodage, puis copier/coller le texte de ce fichier dans une application java graphique faite avec netbeans pour décrypter le texte? je suis obliger de passer tous le fichier à mon application graphique pour le lire avec le bon encodage?

  14. #14
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    Tu peux pas faire de copier/coller d'une machine à une autre sauf dans le cas de système de contrôle à distance ou de machine virtuelle mais dans ce cas c'est le logiciel qui s'interface entre les deux machines qui le gère.

    Sur une même machine, on peut utiliser l'encodage par défaut (à priori) sans soucis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Linux]Encodage des caractères
    Par ProgVal dans le forum Débuter
    Réponses: 2
    Dernier message: 23/08/2009, 09h02
  2. Change l'encodage des caractère sous Debian 4.0
    Par ThitoO dans le forum Administration système
    Réponses: 1
    Dernier message: 05/02/2008, 18h55
  3. [MySQL] Encodage des caractères sous php4 lors de reception
    Par UN|X` dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/04/2007, 15h50
  4. Jouer des .wav sous Linux
    Par c guine dans le forum Modules
    Réponses: 3
    Dernier message: 27/08/2005, 09h42
  5. Les fichiers sous linux/windows
    Par Stessy dans le forum Linux
    Réponses: 5
    Dernier message: 05/12/2003, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo