PHP dispose des principales fonctions de hachage, principe d'empreinte d'un string ou d'un fichier. L'empreinte se caractérise par une longueur fixe et l'opération n'est pas réversible contrairement au cryptage. La notion d'empreinte est utilisée pour faciliter les comparaisons d'objet ou pour sécuriser un mot de passe.
Lister les algorithmes disponibles pour le hachage<?php
print_r(hash_algos());
?>
Exemple de d'algorithmes de hachageArray
(
[0] => md4
[1] => md5
[2] => sha1
[3] => sha256
[4] => sha384
[5] => sha512
[6] => ripemd128
[7] => ripemd160
[8] => whirlpool
[9] => tiger128,3
[10] => tiger160,3
[11] => tiger192,3
[12] => tiger128,4
[13] => tiger160,4
[14] => tiger192,4
[15] => snefru
[16] => gost
[17] => adler32
[18] => crc32
[19] => crc32b
[20] => haval128,3
[21] => haval160,3
[22] => haval192,3
[23] => haval224,3
[24] => haval256,3
[25] => haval128,4
[26] => haval160,4
[27] => haval192,4
[28] => haval224,4
[29] => haval256,4
[30] => haval128,5
[31] => haval160,5
[32] => haval192,5
[33] => haval224,5
[34] => haval256,5
)
Les algorithmes les plus utilisés sont MD5, SHA et CRC.
Calculer le CRC d'un fichierLorsque l'on cherche à savoir si deux fichiers sont identiques, une méthode rapide est de calculer une empreinte de chaque fichier puis de les comparer. Afin d'illustrer la hachage d'un fichier, nous allons utiliser un fichier texte et l'algorithme CRC.
Fichier texte:
123.txtPHP est le meilleur langage de dev sur le WEB
script php pour générer la valeur de hachage:
crc.php<?php
/**
* Exemple pour calculer le CRC du fichier
*/
$file=$_SERVER['DOCUMENT_ROOT'].'/123.txt';
echo hash_file("crc32b", $file);
?>
On obtient l'empreinte suivante:
46c40cfbVérification de la méthode du CRCAfin de vérifier la fiabilité du calcul d'une empreinte, modifions légèrement le fichier texte avec un '!' en fin de phrase.
Fichier texte:
123.txtPHP est le meilleur langage de dev sur le WEB!
On obtient l'empreinte suivante:
b2172f01L'ajout d'un seul caractère dans le texte modifie entièrement le CRC obtenu. La méthode de l'empreinte est rapide, efficace et d'une fiabilité correcte.