php md5 md5-file

php string to hash



¿Md5(file_contents_as_string) será igual a md5_file(/ path/to/file)? (4)

basado en el contenido del archivo, no en los metadatos del archivo como la lista de materiales o el nombre de archivo

Eso no es correcto sobre BOM. BOM es una parte del contenido del archivo, puede ver sus tres bytes en cualquier editor de archivos que no sea Unicode.

Si lo hago:

<?php echo md5(file_get_contents("/path/to/file")) ?>

... esto siempre producirá el mismo hash que:

<?php echo md5_file("/path/to/file") ?>


Sí vuelven lo mismo:

var_dump(md5(file_get_contents(__FILE__))); var_dump(md5_file(__FILE__));

que devuelve esto en mi caso:

string(32) "4d2aec3ae83694513cb9bde0617deeea" string(32) "4d2aec3ae83694513cb9bde0617deeea"

Edición: Eche un vistazo al código fuente de ambas funciones: https://github.com/php/php-src/blob/master/ext/standard/md5.c (líneas 47 y 76). Ambos usan las mismas funciones para generar el hash, excepto que la función md5_file() abre el archivo primero.

2ª Edición: Básicamente, la función md5_file() genera el hash basado en el contenido del archivo, no en los metadatos del archivo como el nombre de archivo. Así es como funciona md5sum en sistemas Linux. Vea este ejemplo:

pr@testumgebung:~# echo foobar > foo.txt pr@testumgebung:~# md5sum foo.txt 14758f1afd44c09b7992073ccf00b43d foo.txt pr@testumgebung:~# mv foo.txt bar.txt pr@testumgebung:~# md5sum bar.txt 14758f1afd44c09b7992073ccf00b43d bar.txt


Sí, lo probé varias veces. En mi caso, resultado para:

<?php echo md5(file_get_contents("1.php")) ?> <br/> <?php echo md5_file("1.php") ?>

Producir salida como:

660d4e394937c10cd1c16a98f44457c2 660d4e394937c10cd1c16a98f44457c2

Lo que parece equivalente en ambas líneas.


md5_file comando md5_file solo contiene el contenido de un archivo con md5.

Si se refiere a la antigua implementación de PHP de md5_file (pero el principio sigue siendo el mismo) source :

function php_compat_md5_file($filename, $raw_output = false) { // ... // removed protections if ($fsize = @filesize($filename)) { $data = fread($fh, $fsize); } else { $data = ''''; while (!feof($fh)) { $data .= fread($fh, 8192); } } fclose($fh); // Return $data = md5($data); if ($raw_output === true) { $data = pack(''H*'', $data); } return $data; }

Entonces, si hash con md5 cualquier cadena o contenido, siempre obtendrás el mismo resultado que md5_file (para la misma codificación y contenido de archivo).

En ese caso, si hash por md5 el contenido de un archivo con file_get_content() o si usa md5_file o incluso si usa el comando md5 con el mismo contenido que el contenido de su archivo, siempre obtendrá el mismo resultado.

Por ejemplo, puede cambiar el nombre de archivo de un archivo, y para dos archivos diferentes, con el mismo contenido, producirán el mismo hash md5.

Por ejemplo: considerando dos archivos que contienen "" (sin las comillas) llamados 1.txt y 2.txt

md5_file("1.txt"); md5_file("2.txt");

saldría

73868cb1848a216984dca1b6b0ee37bc

Tendrá el mismo resultado exacto si md5("") o si md5(file_get_contents("1.txt")) o md5(file_get_contents("1.txt")).