Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    codifica e decodifica password: cosa ne pensate?

    Salve a tutti,

    Visto in questi giorni si è parlato parecchio sul tema di come codificare una password:
    con base64_encode(che però e facile da decodificare con la funzione opposta), con md5(che però non consente il recupero) ecc.
    ,
    mi sono preso la briga di elaborare un codice che sfruttando alcune funzioni php elabora un algoritmo di criptazione e recupero della password.
    Ovviamente io cerco di dare un'idea, poi ognuno può cambiare a proprio piacimento l'algoritmo, affidandosi alla propria creatività.

    N.B. Questo non è un sistema di log-in, ma una procedura che permette il recupero della password da parte dell'amministratore del sito.

    1. Iniziamo creando la tabella che utilizzeremo per l'inserimento ed il recupero della nostra password:

    - o salviamo le istruzioni in una pagina php e la eseguiamo dal browser

    Codice PHP:
    <?php
    require('connessionedb.php'); // o le vostre istruzioni per la connesione al DB
    $query "CREATE TABLE user (
               user_id INT(11) NOT NULL AUTO_INCREMENT,
               user_name VARCHAR (50) NOT NULL,
               user_pass VARCHAR (100) NOT NULL,
               PRIMARY KEY (user_id))"
    ;
    $users mysql_query($query)  or die(mysql_error());
    ?>
    - oppure usiamo il nostro programma di amministrazione di MySql (ad esempio phpMyAdmin) per creare la tabella user con i campi sopraindicati


    2. Creiamo le due pagine html che ci permettono di inserire la password (insert.htm) e di richiederla (getpass.htm):

    insert.htm
    Codice PHP:
    <html>
    <
    head>
    <
    title>codifica</title>
    </
    head>
    <
    body>



     <
    form action="codifica.php" method="post">
      
    Inserisci nome

      
    <input name="name" type="text">


      
    Inserisci password

      
    <input name="pass" type="text" maxlength="20">br>

      <
    input type="submit" name="Submit" value="Avanti">
     </
    form>
    </
    p>
    </
    body>
    </
    html
    getpass.htm
    Codice PHP:
    <html>
    <
    head>
    <
    title>decodifica</title>
    </
    head>
    <
    body>



     <
    form action="decodifica.php" method="post">
      
    Inserisci id

      
    <input name="id" type="text">


      <
    input type="submit" name="Submit" value="Avanti">
     </
    form>
    </
    p>
    </
    body>
    </
    html
    3. Creiamo la pagina (codifica.php) di codifica della password e del suo inserimento nel DB:

    codifica.php
    Codice PHP:
    <?php
      
    require('connessionedb.php'); // o le vostre istruzioni per la connesione al DB
      
      
    $name $_POST['name'];
      
    $pass_get =$_POST['pass'];
      
    $pass_temp base64_encode($pass_get);
      
      
    $insert "INSERT INTO user
                     (user_name)    
                     VALUES
                     ('
    $name')";
      
    $result mysql_query($insert) or die (mysql_error());
      
      
    $id mysql_insert_id();
      
    $temp gettimeofday(); 
      
    $msec = (int) $temp["usec"]; 
      
    $last md5(time() . $msec);

      
    $password mysql_real_escape_string($last $pass_temp $id);

      
    $insert_pass "UPDATE user SET user_pass = '$password' WHERE user_id = '$id' ";
      
    $result mysql_query($insert_pass) or die (mysql_error());

      echo 
    "I dati sono stati inseriti!";
    ?>

    4. Infine creiamo la pagina (decodifica.php) che ci permette il recupero della password:

    decodifica.php
    Codice PHP:
    <?php
      
    require('connessionedb.php'); // o le vostre istruzioni per la connesione al DB
      
      
    $id $_POST['id'];
      
      
    $log "SELECT SUBSTRING(user_pass, 33) FROM user WHERE user_id = '$id' ";
      
    $result mysql_query($log) or die (mysql_error());
      
      
    $row mysql_fetch_row($result);
      if (
    mysql_num_rows($result) != 0)
      {
       
    $pass_temp $row[0];
      }
      
    $lung_id strlen($id);
      
    $lung_temp strlen($pass_temp);
      
    $lung_pass $lung_temp $lung_id;
      
      
    $pass_code substr($pass_temp0$lung_pass);
      
    $pass_decode base64_decode($pass_code);
      echo 
    "La password decodificata è: " $pass_decode;
    ?>
    Ed il gioco è fatto!!!

    Per pareri o chirimenti, non esitate!

    P.S. Ovviamente se i moderatori non dovessero ritenerlo al altezza del forum, prego anche loro di spiegarmi le mie mancanze.


  2. #2
    miglioriamo ulterirmente il codice della pagina decodifica.php, tenendo conto del fatto che l'id inserito può non essere presente nel DB:

    decodifica.php
    Codice PHP:
    <?php
      
    require('connessionedb.php');
      
    $id $_POST['id'];
      
    $log "SELECT SUBSTRING(user_pass, 33) FROM user WHERE user_id = '$id' ";
      
    $result mysql_query($log) or die (mysql_error());
      
    $row mysql_fetch_row($result);
      if (
    mysql_num_rows($result) != 0)
      {
       
    $pass_temp $row[0];
      } else {
       echo 
    "L'id inserito non è presente nel DB

    "
    ;
       echo 
    "<a href=\"getpass.htm\"><<< Inserire un id esistente</a>";
       exit();
      }
      
    $lung_id strlen($id);
      
    $lung_temp strlen($pass_temp);
      
    $lung_pass $lung_temp $lung_id;
      
    $pass_code substr($pass_temp0$lung_pass);
      
    $pass_decode base64_decode($pass_code);
      echo 
    "La password decodificata è: " $pass_decode;
    ?>

  3. #3
    Va be' l'dea per recuperare una passsword, ma lo scopo di un script con username/password e' quello di identificare un utente e logarlo in pagine controllate e non di decodificare una password altrimenti serve solo come giochino fine a se stesso.

    Domanda: come fai ad identificare uno user per permettere l'accesso presumendo che vengano inserite user/password?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Innazitutto l'idea di questo script parte da un concetto di massima protezione che consente il recupero della password solo in locale (tramite backup giornalieri/settimanli della tabella user).

    In virtù questo fatto, già questo script (leggermente modificato) permette un identificazione di username e password in quanto l'id inserito potrà fungere da username (che è unico e volendo fornito all'utente) e la password come da algoritmo può essere identificativa.

    Ripeto, forse è sfuggito il concetto principale (massima protezione), anzi sicuramente è così visto che un guru, un mito, un grande del php come piero.mac (è vero, quindi non fare il modesto) non ha capito che sono state postate 4 pagine su 6 (2 mancanti, ma sottointese per il log-in) per definire un completo sistema di log-in + la possibilità da parte dell'amministratore di recuperare la password.

    Domani posterò il procedimento completo di un sistema di log-in con codifica e decodifica protetta della password.

    grazie a tutti e a domani

  5. #5
    premesso che ne capisco poco di php, quello che volevo evidenziare e' che lo scopo e' identificare lo user, quindi la pagina di login e' essenziale, il recupero della password e' una opzione.

    Sarebbe pure opportuno commentare lo script in modo da far capire facilmente il susseguirsi delle azioni.

    Per valutare la sicurezza di uno script di login e' indispensabile vedere tutte le pagine. Ma gia' che un amministratore possa leggere e decodificare una password tramite form mi fa ritorcere le budella.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Originariamente inviato da piero.mac
    premesso che ne capisco poco di php, quello che volevo evidenziare e' che lo scopo e' identificare lo user, quindi la pagina di login e' essenziale, il recupero della password e' una opzione.

    Sarebbe pure opportuno commentare lo script in modo da far capire facilmente il susseguirsi delle azioni.

    Per valutare la sicurezza di uno script di login e' indispensabile vedere tutte le pagine. Ma gia' che un amministratore possa leggere e decodificare una password tramite form mi fa ritorcere le budella.
    • innazitutto se tu ne capisci poco allora io ne capisco poco alla(-20).

    • che non ho spiegato il susseguirsi delle azioni è pure vero.

    • però una cartella di amministrazione, magari protetta con htaccess anche se contiene un una pagina con un form o qualsiaisi altra cosa mi sembra più che normale.

  7. #7
    Originariamente inviato da piero.mac
    Domanda: come fai ad identificare uno user per permettere l'accesso presumendo che vengano inserite user/password?
    ignora i primi 32 caratteri di MD5, elimina l'id dal fondo e fa il base64_decode e confronta il risultato con la password in chiaro.

    In ogni modo, se posso dare il mio parere, è un sistema di criptazione vagamente inutile, perché i pattern generati dagli algoritmi md5 e base64 sono facilmente riconoscibili, quindi in pratica un utente un minimo smaliziato che mette mano su quel db ci mette assai poco a capire il meccanismo e decodificare di conseguenza.

    Se proprio si vuole la possibilità di recuperare la medesima password, meglio usare un algoritmo reversibile serio, che almeno richieda un minimo di tempo in più per il brute forcing e non decriptabile "a occhio nudo" come questo.

  8. #8
    d'accordo, ma forse ignori l'ultima parte della password (e non solo perchèl e combinazioni sono infinite) che in questo caso semplice è formata dall'id:

    e se fosse formata da (id+4*23)

    oppure ((id*13-29) . md5 . base64 . md5)

    ecc.

    è chiaro che nel post ho fornito un esempio semplice, ma l'algoritmo può essere svillupato all'infinito.

  9. #9
    Originariamente inviato da skidx
    ignora i primi 32 caratteri di MD5, elimina l'id dal fondo e fa il base64_decode e confronta il risultato con la password in chiaro.


    era un invito a pubblicare una cosa completa. E commentata.

    Personalmente non vedo alternativa per chi perde la password se non di fargliene mettere un'altra. Bisogna anche valutare cosa dice la legge sulla privacy al riguardo, cioe' sulla gestione delle password e sui backup.

    Su questa discussione mi fermo qui, perche' le teste sono tante e le idee il doppio.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Originariamente inviato da nickang
    d'accordo, ma forse ignori l'ultima parte della password (e non solo perchèl e combinazioni sono infinite) che in questo caso semplice è formata dall'id:

    e se fosse formata da (id+4*23)

    oppure ((id*13-29) . md5 . base64 . md5)

    ecc.

    è chiaro che nel post ho fornito un esempio semplice, ma l'algoritmo può essere svillupato all'infinito.
    è uguale, son tutti pattern facilmente riconoscibili.
    32 cifre esadecimali => md5
    40 cifre esadecimali => sha1
    lettere maiuscole, minuscole e numeri => base64 (se poi termina con l'uguale è lapalissiano)
    etc. etc.
    vedendo una tabella con un record così la prima cosa che farei è decodificare la parte che sembra il base64, ignorando tutto il resto, perché è quella che più facilmente può nascondere un testo (se la password fosse memorizzata solo in hash non servirebbe tutto quell'altro popo' di roba).

    Puoi sì sviluppare questa cosa all'infinito, se ti va, ma poggeresti comunque su piedi assai fragili: il base64 si riconosce al volo e si decifra istantaneamente.
    Ergo: serve un algoritmo di criptazione serio.

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.