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

    non riesco a decrittare con mcrypt_decrypt();

    ciao a tutti, sto implementando un sistema di autenticazione utente nel mio sito

    per fare questo, nel momento del login, confronto la password immessa dall'utente con quella presente nel database.
    La password nel database deriva da una precedente cifratura con RIJNDAEL_128,
    nel mio caso, per esempio: cwQVXstAXP49/HdspymlvA==
    La decrittazione con mycrypt_decrypt dovrebbe cos� restituire la password in chiaro, ovvero 'segretissimo'
    invece mi escono cose strane e sempre diverse come �3G��_W+U#��k[x, ����.Rb.•�} /-, >�M�@�_�82 eccetera

    ecco il codice per la decrittazione:
    Codice PHP:
    //prima recupero la password nel database, come elemento dell'array $record
    $data $record['password'];
    //imposto le variabili
    $cipher MCRYPT_RIJNDAEL_128
    $mode MCRYPT_MODE_CBC;
    $key sha1('secretKey'true); 
    $ivs mcrypt_get_iv_size($cipher$mode); 
    $iv mcrypt_create_iv($ivs); 
    //dopodich� procedo alla decrittazione
    $data base64_decode($data);
    $stored_password mcrypt_decrypt($cipher$key$data$mode$iv);
    echo 
    'Decrypted data: ' $stored_password '<br>'
    come dicevo, dalla decrittazione ottengo solo quelle strane stringhe di cui sopra.
    Sapreste suggerirmi qualcosa voi?????? GRAZIE!!

    PS:
    La password cifrata era stata invece cos� ottenuta all'atto dell'iscrizione dell'utente:
    Codice PHP:
    //imposto la password
    $password 'segretissimo';
    //imposto le variabili
    $cipher MCRYPT_RIJNDAEL_128
    $mode MCRYPT_MODE_CBC;
    $key sha1('secretKey'true); 
    $ivs mcrypt_get_iv_size($cipher$mode); 
    $iv mcrypt_create_iv($ivs); 
    //dopodich� procedo alla crittazione
    $data mcrypt_encrypt($cipher$key$password$mode$iv);
    $data base64_encode($data); 
    Ultima modifica di Melvis; 21-05-2016 a 16:16

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Avevo scritto na ca.....
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Da quello che ho visto $iv non ha lo stesso valore. Se in entrambi casi $iv ha lo stesso valore (lungo 16 caratteri) allora funziona tutto bene.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Ciao badaze, grazie per aver risposto..
    non riesco però ad afferrare bene il concetto, che cosa intendi dire quando scrivi che $iv non ha lo stesso valore?
    La parte che riguarda l'impostazione delle variabili, variabile $iv compresa, è perfettamente identica sia in fase di crittazione che decrittazione.
    L'unica cosa che cambia è che per crittare uso mcrypt_encrypt(); e poi codifico in base 64, mentre per decrittare prima decodifico in base 64
    e poi utilizzo mcrypt_decrypt.

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Voglio dire che se stampi a video il valore di $iv avrai valori differenti. Mentre se imposti lo stesso valore a $iv (esempio "1234567890123456") funziona tutto bene.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    E' vero, gli $iv non sono gli stessi, infatti vengono generati a random e cambiano ogni volta,
    per cui succedeva che quando cercavo di decrittare una password utilizzavo un $iv diverso da quello originale, e questo non poteva funzionare.
    La soluzione che ho trovato è stata quella di memorizzare nel database, oltre alla password, anche il vettore di inizializzazione originale opportunamente codificato in base64, in maniera poi di recuperarlo, decodificarlo e utilizzarlo per la decrittazione al momento del login.
    Un'altra cosa importante: quando si decritta occorre utilizzare anche la funzione trim, altrimenti l'esito del confronto delle password è negativo!
    $stored_password = trim(mcrypt_decrypt($cipher, $key, $data, $mode, $iv));
    if ($stored_password === $password) { return true; }

    Missione compiuta quindi!
    grazie per l'aiuto badaze!
    Ultima modifica di Melvis; 22-05-2016 a 22:31

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 © 2024 vBulletin Solutions, Inc. All rights reserved.