Ormai tutti sapete ( vero? ) che si devono criptare le password quando le salvate da qualche parte ( per esempio un db )![]()
Molti di voi useranno md5 o sha1, le funzioni native di PHP per farlo... beh sappiate che per password semplici ( le più usate ) questo non è affatto sicuro come pensate!
Si può per esempio usare Google per cercare l'hash e quindi avere la probabile password in chiaro: esempio con "Alex"
Molto di voi quindi useranno un salt, un qualcosa in più che permetta di ovviare ai problemi derivanti dall'usare password sempici... mi son voluto spingere un pochino oltre.
Ho quindi pensato di scrivere 2 righe di PHP per avere un sistema molto più sicuro utilizzando un sistema di cifratura poco usato: il prodotto tra matrici.
Dati in input password e salt ( due stringhe fatte come vi pare ) la funzione esegue una serie di operazioni più o meno complesse ( l'unico limite è la fantasia ) tra cui il prodotto delle due matrici quadrate ( 8 x 8 ) generate dall'elaborazione della password e del salt e si ha quindi in uscita un'altra stringa che per comodità può essere di nuovo un hash se volete.
Vi invito a personalizzarla, anche semplificarla perchè no.
Ecco il codice:
Codice PHP:
<?php
/** Setting error reporting */
error_reporting(E_ALL | E_STRICT);
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
function cripta($pass,$salt){
/* variabili */
$array_pass = Array();
$array_salt = Array();
$array_ris = Array();
$ris=Array();
$n=0;
$i=0;
$j=0;
$y=0;
/* converto in array le due stringhe così da avere le due matrici 8 x 8 */
$hex_md5_pass = bin2hex(md5($pass));
$hex_md5_salt = bin2hex(md5($salt));
// riempo l'array pass
for($i=0;$i<8;$i++){
for($j=0;$j<8;$j++){
$array_pass[$i][$j] = substr($hex_md5_pass,$n,1);
$n++;
}
}
$n=0;
// riempo l'array salt
for($i=0;$i<8;$i++){
for($j=0;$j<8;$j++){
$array_salt[$i][$j] = substr($hex_md5_salt,$n,1);
$n++;
}
}
/* moltiplico i due array */
for($i=0;$i<8;$i++){
for($j=0;$j<8;$j++){
//prodotto riga per colonna
$array_ris[$i][$j]=0;
for($y=0;$y<8;$y++){
$array_ris[$i][$j] = $array_ris[$i][$j]+$array_pass[$i][$y]*$array_salt[$y][$j];
}
}
}
for($i=0;$i<8;$i++){
$ris[$i]=array_sum($array_ris[$i]);
}
return md5(implode($ris));
}
echo(cripta('bella_password','passami_il_sale'));