Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    mcrypt con caratteri strani

    Salve... non so perchè ma non riesco più a criptare le stringhe e decriptarle in modo corretto.
    Per non postare tutto il codice che ho fatto ho provato il codice di php.net notando lo stesso problema:

    Codice PHP:
    <?PHP
    $stuff
    ="String to enc/enc/dec/dec =,=,";
    $key="XiTo74dOO09N48YeUmuvbL0E";
         
    function 
    nl() {
         echo 
    "
     \n"
    ;
    }
    $iv mcrypt_create_iv (mcrypt_get_block_size (MCRYPT_TripleDESMCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
         
    // Encrypting
    function encrypt($string$key) {
     
    $enc "";
     global 
    $iv;
     
    $enc=mcrypt_cbc (MCRYPT_TripleDES$key$stringMCRYPT_ENCRYPT$iv);
         
     return 
    base64_encode($enc);
    }
         
    // Decrypting
    function decrypt($string$key) {
     
    $dec "";
     
    $string trim(base64_decode($string));
     global 
    $iv;
     
    $dec mcrypt_cbc (MCRYPT_TripleDES$key$stringMCRYPT_DECRYPT$iv);
     return 
    $dec;
    }
         
    $encrypted encrypt($stuff$key);
    $decrypted decrypt($encrypted$key);
         
    echo 
    "Encrypted is ".$encrypted nl();
    echo 
    "Decrypted is ".$decrypted nl();    
         
    ?>
    il risultato:
    codice:
    Encrypted is bMJPZOM6bdPhRYQNdHj0Cxow0btrzqTTuYePfs/65qg=
    Decrypted is String to enc/enc/dec/dec =,=,��
    Ci sono quei ?? al fondo... che sono di numero variabile, quindi non posso neanche eliminare manualmente
    Qualcuno sa il perchè?
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    I due caratteri in fondo sono due null bytes. Semplicemente tripledes fara' un paddig con N nullbytes se il testo non e' un multiplo di 8, dove N e' il numero di caratteri mancanti per raggiungere questo multiplo.

    Nel tuo caso $stuff="String to enc/enc/dec/dec =,=,"; ha 30 caratteri, di conseguenza ti aggiunge 2 null in fondo, perche' 32/8=4.
    Se credi che non dovrai mai criptare stringhe che contengano null come ultimo carattere, puoi semplicemente fare un $decrypted = rtrim(decrypt($encrypted, $key));
    Altrimenti fai un substr con la lunghezza del testo iniziale.

    Ps: mi fa ridere il coglione su php net che ha postato l'esempio che hai utilizzato, con vari testi, e che considera i null bytes come "some encryption at the end of the decrypted sting"

    Pps: dovresti usare mcrypt_generic/mdecrypt_generic al posto di mcrypt_cbc.

  3. #3
    ho provato mcrypt_generic e mi fa lo stesso scherzo
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    guarda che il discorso del padding con i nullbytes dipende dalla libreria 3des, non dal metodo che usi. Ti ho consigliato di usare i *_generic perche' le mcrypt_cbc/cfb/ebc sono deprecate.

    E non c'e' nessun scherzo, e' un comportamento normale. Devi semplicemente togliere i caratteri in eccesso.

  5. #5
    a ok... non avevo capito...
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.