cyrpt md5, sha1: Criptare e decriptare stringhe in php

Obiettivo del tutorial: Utilizzare le funzion crypt() md5(), sha1() per criptare e decriptare stringhe.

In un tutorial precedente abbiamo visto uno script per verificare username e password. In questo tutorial aggiungeremo altri elementi all’argomento Verifica del form di login.

Una cosa da evitare quando si costruisce uno script per l’autenticazione è di evitare di salvare testualmente le password nel database.

Conviene sempre prima criptarle e poi salvarle nel database.

Di seguito vedremo la funzione crypt() per criptare e decriptare stringhe.

crypt() usa un algoritmo di criptazione DES.

Il codice seguente recupera la password passata dal form di login con il metodo GET e la confronta con la password criptata prelevata dal database. In questo esempio non sono state inserite le funzioni per prelevare la password dal database si assume che la password criptata sia stata prelevata è immagazzinata nella variabile “$encpass”.

<?php
  $pass = (isset($_GET['pass'])) ? $_GET['pass'] :  '';
  $encpass = '$1$FK3.qn2.$Si5KhnprsRb.N.SEF4GMW0';
  
  // Se criptando $pass si ottiene $encpass
  // allora crypt ritorna $encpass.
  if (crypt($pass, $encpass) === $encpass) {
    echo 'Login effettuato.';
  } else {
    echo 'Login fallito.';
  }
?>

E’ molto importante non salvare nei database le password testualmente, senza alcun tipo di criptazione.

Altri due algoritmi di criptazione molto usati sono il Secure Hash Algorithm 1 (SHA1) e Message Digest Algorithm 5 (MD5). Php supporta questi algoritmi con le funzioni sha1() e md5.

Il codice per implementare queste funzioni è simile a quello visto per la funzione cript().

Esempio di codice con sha1()

<?php
  $pass = (isset($_GET['pass'])) ? $_GET['pass'] :'';

  $sha1pass = '61c2feed11e0e53eb8e295ab8da78150be12f301';

  if (sha1($pass) === $sha1pass) {
    echo 'Login effettuato.';
  } else {
    echo 'Login fallito.';
  }
?>

Esempio di codice con md5()

<?php
  $pass = (isset($_GET['pass'])) ? $_GET['pass'] :'';

  $md5pass = '6958b43cb096e036f872d65d6a4dc01b';

  if (md5($pass) === $md5pass) {

    echo 'Login effettuato.';
  } else {
    echo 'Login fallito.';
  }
?>

La differenza tra questi ultimi due algoritmi è il precedente è che per SHA1 e MD5 il checksum di una stringa è sempre lo stesso, per il DES cambia ogni volta.