Visualizzazione risultati 1 fino 8 di 8

Discussione: MySQL PASSWORD() oppure SHA1()

  1. #1
    Guest

    Predefinito MySQL PASSWORD() oppure SHA1()

    Ciao a tutti, ho un grosso problema: ho questa query:

    Codice PHP:
    $query = 'SELECT * FROM login WHERE user = "'.mysql_real_escape_string($username, $db).'" AND password = PASSWORD("'.mysql_real_escape_string($password,$db).'")';
    E quando l'ho fatta partire non mi ha restituito alcun risultato nonostante in locale vada e trovi un risultato (com'è giusto che sia).
    Così ho pensato che MySQL di AlterVista non gestisse la funzione PASSWORD() e ho deciso di sostituirla con SHA1() come segue:

    Codice PHP:
    $query = 'SELECT * FROM login WHERE user = "'.mysql_real_escape_string($username, $db).'" AND password = UNHEX(SHA1("'.mysql_real_escape_string($password,$db).'"))';
    Tuttavia non è cambiato assolutamente nulla: non ottengo risultati. Eppure in locale funziona!!!
    Qualche idea?
    Ultima modifica di dreadnaut : 20-09-2012 alle ore 20.59.31 Motivo: + tag [php] per il codice

  2. #2
    Guest

    Predefinito

    Hai provato a stampare la query e ad eseguirla direttamente dentro PhpMyAdmin? vedresti 1) se funziona 2) eventuali errori restituiti da MySQL. Ciao!

  3. #3
    Guest

    Predefinito

    Certo che l'ho eseguita dentro phpmyadmin.
    La query funziona, non vengono restituiti errori ma a quanto pare non restituisce risultati. Non capisco perchè la STESSA query in locale trova il record esatto, sul web invece no.

  4. #4
    Guest

    Predefinito

    Ho risolto.
    Praticamente bisogna richiamare SHA1() per criptare e SHA1() per decriptare.
    Io ero convinto che servisse UNHEX(SHA1(...)).

    Tuttavia non capisco come mai non vada PASSWORD(). Mah, rimane un mistero.

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da secretlab Visualizza messaggio
    Ho risolto.
    Praticamente bisogna richiamare SHA1() per criptare e SHA1() per decriptare.
    Io ero convinto che servisse UNHEX(SHA1(...)).

    Tuttavia non capisco come mai non vada PASSWORD(). Mah, rimane un mistero.
    Non so cosa ru voglia fare ma quelle sono funzioni one-way non si possono decriptare.

  6. #6
    Guest

    Predefinito

    Con "decriptare" intendevo "leggere" la password.

    Se uso SHA1("ciao") ottengo 40 caratteri che criptano la stringa 'ciao'.
    Se voglio leggere quella password non posso confrontarla con 'ciao' perchè diversa da 18290460293719acsa81203caisd...

    Ergo SHA1("ciao") per criptarla e SHA1("ciao") per leggerla.
    Ad ogni modo rimane il dubbio del perchè SHA1 vada e PASSWORD no.

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da secretlab Visualizza messaggio
    Con "decriptare" intendevo "leggere" la password.

    Se uso SHA1("ciao") ottengo 40 caratteri che criptano la stringa 'ciao'.
    Se voglio leggere quella password non posso confrontarla con 'ciao' perchè diversa da 18290460293719acsa81203caisd...

    Ergo SHA1("ciao") per criptarla e SHA1("ciao") per leggerla.
    Ad ogni modo rimane il dubbio del perchè SHA1 vada e PASSWORD no.
    Non hai capito. SHA1 come tutti i sistemi one-way non si possono decriptare. Ti creano l'HASH e con quello devi lavorare.

    Riprendendo il tuo esempio se devi conservare una password ('ciao') non la scrivi in chiaro ma memorizzi il suo HASH ('1e4e888ac66f8dd41e00c5a7ac36a32a9950d271').

    Ora quando devi validare un tentativo di login usando la password non metti a confronto 'ciao' con '1e4e888ac66f8dd41e00c5a7ac36a32a9950d271', e neppure decripti l'HASH, ma metti a confronto SHA1('ciao') con il suo HASH e visto che l''HASH è univoco, se corrispondono vuol dire che la password è corretta.

  8. #8
    Guest

    Predefinito

    E' comunque sconsigliabile la trasmissione in chiaro della password per i login per criptarla (o calcolarne l'HASH) lato server. Conviene, se non di dispone di connessione SSL e proprio la si deve trasmettere, inviarla già criptata dal browser con javascript. Io preferisco non trasmetterla, a parte la prima volta quando l'utente si registra. Ci sono diversi sistemi per farlo usndo Ajax + PHP.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •