Mi è venuta in mente questa idea di poter memorizzare password come numeri interi che occupano 4 o 8 byte anziché un hash che richiede 150 byte o qualcosa del genere. Ho scritto questa funzione che converte una stringa in un intero basato su alcuni calcoli elementari
function pass($pass) {
$value = 0;
for ($i = 0, $l = strlen($pass); $i < $l; $i++) {
$value += pow(ord(~$pass[$i]), 1/2);
}
return (int)round(pow($value, (int)('1.' . $value)) * 10000000000);
}
var_dump(pass('M'));
var_dump(pass('m'));
int(133416640641)
int(120830459736)
Per come la vedo io per essere hackerato prima, l'hacker deve conoscere il valore int memorizzato per la password e l'algoritmo. Possono ottenere il valore sia se hackerano il mio database o prendiamo un vecchio file di backup che è noto per essere l'exploit più comune (immagino) ma ancora se non conoscono l'algoritmo non sarebbero in grado di romperlo?
Non penso sia possibile riportare un valore convertito alla stringa originale in quanto sarebbe un problema con la complessità di molti caratteri contenuti nella stringa, giusto?
L'altra possibilità è che inseriscano accidentalmente un valore che si converte allo stesso valore della password originale, teoricamente suppongo che ci dovrebbe essere una quantità infinita di stringhe che possono essere convertite allo stesso valore ma non sono sicuro riguardo le reali possibilità che ciò accada, così come questo problema è presente anche negli algoritmi di hashing noti come collisione.
Come probabilmente hai già intuito sono molto lontano da un esperto di sicurezza e suppongo che questo sia tutto spazzatura di cui sto parlando adesso, ma voglio sapere perché?