Va md5(file_contents_as_string) égal md5_file(/chemin/vers/fichier)?
Si je fais:
<?php echo md5(file_get_contents("/path/to/file")) ?>
...ce sera toujours produire le même hash que:
<?php echo md5_file("/path/to/file") ?>
- Hm, ne peut pas le dire, mais si le fichier contient un marque d'ordre d'octet et la chaîne n'a pas alors les valeurs de hachage ne sera pas égale.
- [en réponse au commentaire supprimé] j'ai pu l'essayer moi-même. Je suis juste inquiet que si je reçois un match et je commence à en comparant md5() pour md5_file() il peut y avoir des problèmes en bas de la ligne, qui produisent différents hachages - peut-être à voir avec php_ini directives ou quelque chose de ce genre moyen-dessus de ma tête qui va être un cauchemar pour le debug/identifier.
Vous devez vous connecter pour publier un commentaire.
Oui, ils retournent le même:
qui retourne dans mon cas:
Edit:
Jetez un oeil au code source de ces deux fonctions: https://github.com/php/php-src/blob/master/ext/standard/md5.c (Ligne 47 & 76). Ils utilisent tous les deux les mêmes fonctions pour générer le hachage, sauf que le
md5_file()
fonction ouvre le fichier en premier.2ème Édition:
Fondamentalement, la
md5_file()
fonction génère le hachage basé sur le contenu du fichier, et non pas sur le fichier de méta-données comme le nom de fichier. C'est de la même façonmd5sum
sur les systèmes Linux de travail.Voir cet exemple:
md5_file
commande hashs la contenu d'un fichier à l'aide de md5.Si vous vous référez à l'ancienne md5_file PHP de mise en œuvre (mais le principe est toujours le même) source :
Donc, si vous hachage avec
md5
toute chaîne ou de contenu, vous obtiendrez toujours le même résultat quemd5_file
(pour l'encodage et le contenu des fichiers).Dans ce cas, si vous avez un hachage md5 du contenu d'un fichier avec
file_get_content()
ou si vous utilisezmd5_file
ou même si vous utilisezmd5
commande avec le même contenu que votre contenu du fichier, vous obtiendrez toujours le même résultat.Par exemple, vous pouvez modifier le nom de fichier d'un fichier, et pour les deux fichiers différents, avec le même contenu, ils vont produire le même hash md5.
Par exemple:
En considérant deux fichiers contenant des "stackoverflow" (sans les guillemets) nommé 1.txt et 2.txt
serait sortie de
Vous aurez exactement le même résultat si vous
md5("stackoverflow")
ou si vousmd5(file_get_contents("1.txt"))
oumd5(file_get_contents("1.txt")).
Ce n'est pas correct au sujet de la NOMENCLATURE.
BOM est une partie du contenu du fichier, vous pouvez voir ses trois octets en tout cas de non-unicode éditeur de fichier.
Oui, je l'ai essayé plusieurs fois.
Dans mon cas, le résultat pour les:
Produire en sortie:
Qui semble équivalent sur les deux lignes.