md5 - sha1 - crypt

ciao a tutti ...... :angel:

di nuovo qui a rompere con le mie domande

stavo leggendo un po sulla cifratura

e esainando un po di codice altrui ho visto la funzione crypt()

da quanto ho capito sembra che anch'essa sia un hashing al auqale è possibile passare un salt (se erro vi prego correggetemi)

avevo intenzione di pssare dall'hashing md5 a quello sha1 per maggior sicurezza

ora mi domando e mi chiedo :

tra crypt con salt e sha1 qual è il piu sicuro e perche?

 ::) ::)

inviato 9 anni fa
dyd666
X 0 X
tra crypt con salt e sha1 qual è il piu sicuro e perche?

cript con salt è solo un metodo che consiste nell'aggiungere un pre/suf fisso ad una stringa che verrà poi criptata con SHA1 o MD5 per rendere piu difficile il brute forcing ( se mai riescono a trovare gli hash nel database )

puoi passare il salt a qualsiasi funzione :

<?php

$password = $_POST['password'];

$salt   = "{a6fr8to0)%($=?%!!|=)9`YK}";

$pass = md5($salt . $password);

//$pass = sha1($salt . $password);

// controllo con salt

if(sha1($salt . $password) == $passwordDalDatabase){

  //login

}else{

  //pass errata;

}

//password nel database è stata salvata con sha1($salt . $password);

?>

sha1 è più sicuro di md5 per vari motivi:

con md5 trovi facilmente rainbow tables da diversi Gibabyte contenenti le corrispondenze HASH - PAROLA LEGGIBILE,

questo rende più facile trovare archivi di parole da usare per il brute forcing.

Md5 produce un digest di 32caratteri che volendo in alcuni casi è possibile calcolare in maniera inversa,non va sempre a buon fine :D :2funny:

sha1 invece produce un digest di 41caratteri (anche qui,come l'md5, il digest è in esadecimale) e in questo caso l'algoritmo di hashing è totalemente differente.

sottolineo il fatto che hashing è una tecnica (teoricamente) irreversibile ( se non con un po di BF e tanto culo ;D) cioè una parola dopo essere stata hashata non può essere resa rileggibile (partendo dall'hash) quindi le verifiche andranno fatte solo per eguaglianza ( $hashmd5 == $altrohashinmd5  ) invece la criptazione ha un meccanismo inverso che permette di dicefrare il messaggio solo ottenendo la chiave privata ( cioè calcolando il fattoriale di un intero con più di 200 [rsa 2048 : 517 cifre ])

in pratica funziona così:

utente 1 manda un messaggio a utente 2 con la chiave pubblica che servirà a criptare il messaggio

utente 2 cripta il messaggio con la chiave pubblica ricevuta da utente 1

utente 1 riceve il messaggio criptato con la chiave pubblica, usa la sua chiave privata per decriptare il messaggio e renderlo leggibile.

è ovvio che una simile tecnologia sarebbe inutile per la gestione delle password in un database, quindi l'hashing è più che adatto.

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
modificato 9 anni fa
X 0 X

thanks per la risposta (mi piace tanto quando sono un po piu teoriche eheheh) ;D

ma ho un dubbio su quanto segue

--

cript con salt è solo un metodo che consiste nell'aggiungere un pre/suf fisso ad una stringa che verrà poi criptata con SHA1 o MD5 per rendere piu difficile il brute forcing

---

ho effettuato hashing sha1 md5 e crypt con seme della stessa stringa

che guarda un po ..chiamata "pippo"

md5: 0c88028bf3aa6a6a143ed846f2be1ea4

sha1: d012f68144ed0f121d3cc330a17eec528c2e7d59

cript con seme vuota

//$pass_cript=crypt($pass,'');

cript_con_seme: $1$ew5.P20.$CWiIDV1Ti5cXECSnG.Zbq/

ora se cript mette un prefisso e mi fa l'md5 o sha1 non dovrebbe essere uguale a quella md5 o sha1?

 :angel:

 :bye:

risposto 9 anni fa
dyd666
X 0 X

crypt usa metodi di criptazione che usano lo standard Unix DES ( se non erro sempre !!!)

invece md5 e sha1 usano i loro algoritmi, quindi non puoi ottenere un md5 con crypt e vice versa,stessa cosa con lo sha1.

quindi ottieni sempre una stringa di n  caratteri indipendentemente da cosa passi come argomento.

dove n  è 32 per l'md5 e 41 per lo sha1.

Vale a dire che il digest ottenuto è indipendente dalla lunghezza della stringa passata alla funzione.

per quest con   '' ( stringa vuota ), 0 , null ( dovrei verificare )  otterrai sempre un hash di n caratteri

<?php
echo strlen(sha1("")); //41
echo strlen(md5("")); //32
?>

il salt serve a rendere meno intuibile l'hash della password :

<?php
    $pass = 'pippo';
    $salt = "parola_SeGrEtA%&[]{}TrfÂ8ë`?N";
      echo md5($pass) . '<br />';
      echo sha1($pass)  . '<br />';

      echo md5($salt . $pass) . '<br />';
      echo sha1($salt . $pass) . '<br />';
?>
risultato :
md5 : 0c88028bf3aa6a6a143ed846f2be1ea4
sha1 : d012f68144ed0f121d3cc330a17eec528c2e7d59
md5 + salt : 232457d28f0cfae46f1a3f3ca6e363cb
sha1 + salt : b32b083c30a5c8c8134a64b26395576ce74e6529
risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

thanks trash un giorno futuro ricambiero eheh :coolsmiley:

risposto 9 anni fa
dyd666
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda