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

Langage PHP Discussion :

Probleme fonction cryptage


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut Probleme fonction cryptage
    Bonjour,

    Je rencontre un problème à l'utilisation de ma fonction d'encryptage de données sur un fichier texte. A l'enregistrement, le message décrypté est bien celui enregistré (après le chargement de la page qui à enregistré les données). En revanche quand je reviens sur la page qui affiche le message décrypté, le message est illisible (caractères spéciaux) et est différent à chaque lecture de la page. Une idée svp ?

    Voici le tout :

    Les fonctions utilisées :
    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
    // On calcule la taille de la clé pour l'algo triple des
    $cle_taille = mcrypt_module_get_algo_key_size(MCRYPT_3DES);
    // On calcule la taille du vecteur d'initialisation pour l'algo triple des et pour le mode NOFB
    $iv_taille = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_NOFB);
    //On fabrique le vecteur d'initialisation, la constante MCRYPT_RAND permet d'initialiser un vecteur aléatoire
    $iv = mcrypt_create_iv($iv_taille, MCRYPT_RAND);
    $cle = md5("9840p1KzY");
    // On retaille la clé pour qu'elle ne soit pas trop longue
    $cle = substr($cle, 0, $cle_taille);
     
    function cryptage($message) {
    	global $iv, $cle;
    	// On le crypte
    	$message_crypte = mcrypt_encrypt(MCRYPT_3DES, $cle, $message, MCRYPT_MODE_NOFB, $iv);
    	return $message_crypte;
    }
     
    function decryptage($message) {
    	global $iv, $cle;
    	// On le décrypte
    	$message_decrypte = mcrypt_decrypt(MCRYPT_3DES, $cle, $message, MCRYPT_MODE_NOFB, $iv);
    	return $message_decrypte;
    }
    Enregistrement des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $message = $_POST['message'];
    $message_crypte = cryptage($message);
    $fp = fopen("news_hotesses.txt","w+");
    fwrite($fp, $message_crypte);
    fclose($fp);
    Récupération des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( is_file('news_hotesses.txt') ) {
    	$fp = fopen("news_hotesses.txt","r");
    	$message_decrypte = decryptage(fread($fp,filesize("news_hotesses.txt")));
    	fclose($fp);
    }

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Bonjour,

    Je dirais que c'est normal, ton vecteur d'initialisation est régénéré à chaque rechargement de la page. Or il faut qu'il soit identique pour la chiffrement et le déchiffrement.

    Voici une modification de ton exemple :

    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
    <?php
    // On calcule la taille de la clé pour l'algo triple des
    $cle_taille = mcrypt_module_get_algo_key_size(MCRYPT_3DES);
    // On calcule la taille du vecteur d'initialisation pour l'algo triple des et pour le mode NOFB
    $iv_taille = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_NOFB);
    //On fabrique le vecteur d'initialisation, la constante MCRYPT_RAND permet d'initialiser un vecteur aléatoire
    $iv = mcrypt_create_iv($iv_taille, MCRYPT_RAND);
     
    if (!isset($_SESSION['iv'])) {
        $_SESSION['iv'] = $iv;
    }
     
    $cle = md5("9840p1KzY");
    // On retaille la clé pour qu'elle ne soit pas trop longue
    $cle = substr($cle, 0, $cle_taille);
     
    function cryptage($message) {
        global $cle;
        // On le crypte
        $message_crypte = mcrypt_encrypt(MCRYPT_3DES, $cle, $message, MCRYPT_MODE_NOFB, $_SESSION['iv']);
        return $message_crypte;
    }
     
    function decryptage($message) {
        global $cle;
        // On le décrypte
        $message_decrypte = mcrypt_decrypt(MCRYPT_3DES, $cle, $message, MCRYPT_MODE_NOFB, $_SESSION['iv']);
        return $message_decrypte;
    }
     
    $message = 'Lorem ipsum dolore sit amet consectetur';
    $message_crypte = cryptage($message);
    $fp = fopen("news_hotesses.txt","w+");
    fwrite($fp, $message_crypte);
    fclose($fp);
     
    if ( is_file('news_hotesses.txt') ) {
        $fp = fopen("news_hotesses.txt","r");
        $message_decrypte = decryptage(fread($fp,filesize("news_hotesses.txt")));
        fclose($fp);
        echo $message_decrypte;
    }
    ?>
    Là tu verras que ton message est bien déchiffré.

    En revanche, là où mon analyse s'arrête, c'est sur comment gérer efficacement ce vecteur. Il semble que, d'après la doc PHP qu'il peut (doit ?) être public, donc transmis avec le fichier.

    A creuser...
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    Merci de ta réponse.

    Je n'ai pas fais de tests avec ce que tu à mis directement, mais dès le moment ou tu fermes le navigateur, est ce que cela fonctionnera toujours ? Si on revient un jour après, est ce que le décryptage fonctionnera ?

  4. #4
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Non puisque la variable est valable qu'on moment de l'exécution du script.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    Ok ok ...

    J'ai simplifié un peu le tout avec des infos que j'ai pu trouver sur le net et j'en arrives à ceci :

    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
    // On calcule la taille de la clé pour l'algo triple des
    $cle_taille = mcrypt_module_get_algo_key_size(MCRYPT_3DES);
     
    $cle = md5("984jkG0p1KzY");
    // On retaille la clé pour qu'elle ne soit pas trop longue
    $cle = substr($cle, 0, $cle_taille);
     
    function cryptage($message) {
    	global $iv, $cle;
    	// On le crypte
    	$message_crypte = mcrypt_encrypt(MCRYPT_3DES, $cle, $message, MCRYPT_MODE_ECB);
    	return $message_crypte;
    }
     
    function decryptage($message) {
    	global $iv, $cle;
    	// On le décrypte
    	$message_decrypte = mcrypt_decrypt(MCRYPT_3DES, $cle, $message, MCRYPT_MODE_ECB);
    	return $message_decrypte;
    }
    Le message décrypté est bien celui enregistré, même apres un refresh mais je me retrouve avec des "?" dans des losanges ... De quoi cela peut venir ?

  6. #6
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Problème d'encodage de la page et du message enregistré ? (UTF-8 et ISO-8859 par exemple).

    Es-tu sûr que le message est bien décrypté ?

    Montre nous ton texte d'entrée, le texte retourné et le fichier que tu génères mets le en pièce jointe s'il te plait.

    Au passage, ton vecteur d'initialisation n'est plus déclaré ? ou tu as juste oublié de le reporter ?
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

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

Discussions similaires

  1. [XSL]Probleme fonction recursive
    Par Le-Cortex dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 12/12/2005, 15h10
  2. [Mail] Probleme fonction mail()
    Par tissot dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2005, 12h55
  3. problème fonctions callback
    Par youp_db dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 02/10/2005, 14h47
  4. probleme fonction gethostbyname
    Par oclone dans le forum Développement
    Réponses: 6
    Dernier message: 14/04/2005, 10h31
  5. probleme fonction syntaxe
    Par gIch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 09h52

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