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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    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
    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 ?
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    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 émérite 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
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    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 : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    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".
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

+ 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