Gibt es einen Unterschied? md5_file vs. hash_file('md5')
bearbeitet von Regina Schaukrug* hash_file() gibt es seit PHP 5.1.2
* md5_file() gibt es seit PHP 4.2.0
Ich würde jetzt vermuten, dass `md5_file( $file, false )` lediglich ein Aufruf von `hash_file('md5', $file, false)` ist und letztendlich dann `hash('md5', file_get_contents( $file), false )` aufgerufen wird.
**Tipp:**
`hash_file()` ist flexibler:
in einem Skript könnte das so aussehen: ( Die Datei `$file` wird nur neu geschrieben, wenn sich $_POST['text'] von bisherigen Inhalt unterscheidet )
~~~php
define ('HashMethod', setHashMethod() );
if (
( ! is_file( $file ) )
or hash_file( HashMethod, $file ) != hash( HashMethod, $_POST['text']
) {
file_put_contents( $file, $_POST['text'], LOCK_EX );
}
function setHashMethod ()
$prefered_hash_methods = array( 'sha256', 'md5' );
foreach ( $prefered_hash_methods as $method ) {
if ( in_array $method ) {
return $method;
}
}
trigger_error ( 'Fatal: Keine der Hashmethoden (Vorgabe: ' . implode(', ', $prefered_hash_methods) . ' ) wählbar!', E_USER_ERROR);
~~~
Ergänzung zu [dedlfix](https://forum.selfhtml.org/self/2018/feb/17/gibt-es-einen-unterschied-md5-file-vs-hash-file-md5/1713982#m1713982):
Möglicherweise gibt **irgendein extern durchgeführtes Hash-Programm** für den gleichen Inhalt nicht etwas wie
~~~
'2a0973908ffa44eb4a01ad5729298cdd'
~~~
also die hexadezimale Repräsentierung des eigentlich binären Hashes zurück, sondern etwas wie
~~~
'CYkezTbdXcqKGFinQxI0ww=='
~~~
(die Base-64-codierte Repräsentierung). Dann ist
~~~php
$hash = base64encode( hash( $method, $blob, true ) );
~~~
bzw.
~~~php
$hash = base64encode( hash_file( $method, $file, true ) );
~~~
für den Vergleich verwendbar.
Ein binärer Hash sieht in einer Konsole etwa so aus: `?h��뻳u�a��iK=�` kann das Terminal aber auch "zerstören"; ebenso kann es dazu kommen, dass andere, nicht binär-sichere Programme "in nicht beabsichtigter Weise" reagieren weshalb regelmäßig die Darstellung und Ausgabe als hexadezimale Repräsentierung bzw. Base-64-kodierter Blob verwendet werden.
Gibt es einen Unterschied? md5_file vs. hash_file('md5')
bearbeitet von Regina Schaukrug* hash_file() gibt es seit PHP 5.1.2
* md5_file() gibt es seit PHP 4.2.0
Ich würde jetzt vermuten, dass `md5_file( $file, false )` lediglich ein Aufruf von `hash_file('md5', $file, false)` ist und letztendlich dann `hash('md5', file_get_contents( $file), false )` aufgerufen wird.
**Tipp:**
`hash_file()` ist flexibler:
in einem Skript könnte das so aussehen: ( Die Datei `$file` wird nur neu geschrieben, wenn sich $_POST['text'] von bisherigen Inhalt unterscheidet )
~~~php
define ('HashMethod', setHashMethod() );
if (
( ! is_file( $file ) )
or hash_file( HashMethod, $file ) != hash( HashMethod, $_POST['text']
) {
file_put_contents( $file, $_POST['text'], LOCK_EX );
}
function setHashMethod ()
$prefered_hash_methods = array( 'sha256', 'md5' );
foreach ( $prefered_hash_methods as $method ) {
if ( in_array $method ) {
return $method;
}
}
trigger_error ( 'Fatal: Keine der Hashmethoden (Vorgabe: ' . implode(', ', $prefered_hash_methods) . ' ) wählbar!', E_USER_ERROR);
~~~
Ergänzung zu [dedlfix](https://forum.selfhtml.org/self/2018/feb/17/gibt-es-einen-unterschied-md5-file-vs-hash-file-md5/1713982#m1713982):
Möglicherweise gibt **irgendein extern durchgeführtes Hash-Programm** für den gleichen Inhalt nicht etwas wie
~~~
'2a0973908ffa44eb4a01ad5729298cdd'
~~~
also die hexadezimale Repräsentierung des eigentlich binären Hashes zurück, sondern etwas wie
~~~
'CYkezTbdXcqKGFinQxI0ww=='
~~~
(die Base-64-codierte Repräsentierung). Dann ist
~~~php
$hash = base64encode( hash( $method, $blob, true ) );
~~~
bzw.
~~~php
$hash = base64encode( hash_file( $method, $file, true ) );
~~~
für den Vergleich verwendbar.
Ein binärer Hash sieht in einer Konsole etwa so aus: `?h��뻳u�a��iK=�` kann das Terminal aber auch "zerstören"; ebenso kann es dazu kommen, dass andere, nicht binär-sichere Programme "in nicht beabsichtigter Weise" reagieren weshalb die regelmäßig die Darstellung und Ausgabe als hexadezimale Repräsentierung bzw. Base-64-kodierter Blob verwendet werden.
Gibt es einen Unterschied? md5_file vs. hash_file('md5')
bearbeitet von Regina Schaukrug* hash_file() gibt es seit PHP 5.1.2
* md5_file() gibt es seit PHP 4.2.0
Ich würde jetzt vermuten, dass `md5_file( $file, false )` lediglich ein Aufruf von `hash_file('md5', $file, false)` ist und letztendlich dann `hash('md5', file_get_contents( $file), false )` aufgerufen wird.
**Tipp:**
`hash_file()` ist flexibler:
in einem Skript könnte das so aussehen: ( Die Datei `$file` wird nur neu geschrieben, wenn sich $_POST['text'] von bisherigen Inhalt unterscheidet )
~~~php
define ('HashMethod', setHashMethod() );
if (
( ! is_file( $file ) )
or hash_file( HashMethod, $file ) != hash( HashMethod, $_POST['text']
) {
file_put_contents( $file, $_POST['text'], LOCK_EX );
}
function setHashMethod ()
$prefered_hash_methods = array( 'sha256', 'md5' );
foreach ( $prefered_hash_methods as $method ) {
if ( in_array $method ) {
return $method;
}
}
trigger_error ( 'Fatal: Keine der Hashmethoden (Vorgabe: ' . implode(', ', $prefered_hash_methods) . ' ) wählbar!', E_USER_ERROR);
~~~
Ergänzung zu [dedlfix](https://forum.selfhtml.org/self/2018/feb/17/gibt-es-einen-unterschied-md5-file-vs-hash-file-md5/1713982#m1713982):
Möglicherweise gibt **irgendein extern durchgeführtes Hash-Programm** für den gleichen Inhalt nicht etwas wie
~~~
'2a0973908ffa44eb4a01ad5729298cdd'
~~~
also die hexadezimale Repräsentierung des eigentlich binären Hashes zurück, sondern etwas wie
~~~
'CYkezTbdXcqKGFinQxI0ww=='
~~~
(die Base-64-codierte Repräsentierung). Dann ist
~~~php
base64encode( hash( $method, $blob, true ) );
~~~
bzw.
~~~php
base64encode( hash_file( $method, $file, true ) );
~~~
für den Vergleich verwendbar.
Ein binärer Hash sieht in einer Konsole etwa so aus: `?h��뻳u�a��iK=�` kann das Terminal aber auch "zerstören"; ebenso kann es dazu kommen, dass andere, nicht binär-sichere Programme "in nicht beabsichtigter Weise" reagieren weshalb die regelmäßig die Darstellung und Ausgabe als hexadezimale Repräsentierung bzw. Base-64-kodierter Blob verwendet werden.
Gibt es einen Unterschied? md5_file vs. hash_file('md5')
bearbeitet von Regina Schaukrug* hash_file() gibt es seit PHP 5.1.2
* md5_file() gibt es seit PHP 4.2.0
Ich würde jetzt vermuten, dass `md5_file( $file, false )` lediglich ein Aufruf von `hash_file('md5', $file, false)` ist und letztendlich dann `hash('md5', file_get_contents( $file), false )` aufgerufen wird.
**Tipp:**
`hash_file()` ist flexibler:
in einem Skript könnte das so aussehen: ( Die Datei `$file` wird nur neu geschrieben, wenn sich $_POST['text'] von bisherigen Inhalt unterscheidet )
~~~php
define ('HashMethod', setHashMethod() );
if (
( ! is_file( $file ) )
or hash_file( HashMethod, $file ) != hash( HashMethod, $_POST['text']
) {
file_put_contents( $file, $_POST['text'], LOCK_EX );
}
function setHashMethod ()
$prefered_hash_methods = array( 'sha256', 'md5' );
foreach ( $prefered_hash_methods as $method ) {
if ( in_array $method ) {
return $method;
}
}
trigger_error ( 'Fatal: Keine der Hashmethoden (Vorgabe: ' . implode(', ', $prefered_hash_methods) . ' ) wählbar!', E_USER_ERROR);
~~~
Ergänzung zu dedlfix:
Möglicherweise gibt **irgendein extern durchgeführtes Hash-Programm** für den gleichen Inhalt nicht etwas wie
~~~
'2a0973908ffa44eb4a01ad5729298cdd'
~~~
also die hexadezimale Repräsentierung des eigentlich binären Hashes zurück, sondern etwas wie
~~~
'CYkezTbdXcqKGFinQxI0ww=='
~~~
(die Base-64-codierte Repräsentierung). Dann ist
~~~php
base64encode( hash( $method, $blob, true ) );
~~~
bzw.
~~~php
base64encode( hash_file( $method, $file, true ) );
~~~
für den Vergleich verwendbar.
Ein binärer Hash sieht in einer Konsole etwa so aus: `?h��뻳u�a��iK=�` kann das Terminal aber auch "zerstören"; ebenso kann es dazu kommen, dass andere, nicht binär-sichere Programme "in nicht beabsichtigter Weise" reagieren weshalb die regelmäßig die Darstellung und Ausgabe als hexadezimale Repräsentierung bzw. Base-64-kodierter Blob verwendet werden.