2009-08-10 3 views
4

Gibt es eine Effizienzanalyse, wie MD5 von der Dateigröße abhängt. Ist es tatsächlich abhängig von der Dateigröße oder dem Inhalt der Datei? Also, weil ich 500mb Datei mit allen Leerzeichen und eine 500mb Datei mit Film drin habe, würde MD5 die gleiche Zeit nehmen, um den Hash-Code zu generieren?Wie hängt die MD5-Generierung von der Dateigröße ab?

Antwort

8

Jedes Hashsum ist per Definition eine mathematische Summe der Bytes von dem, was Sie summieren. Sie müssen die Datei zumindest über einen Stream lesen - es dauert länger, bis mehrere Bytes durchlaufen werden. Allerdings würde ich (allgemein gesprochen) sagen, der Engpass ist in der Tat lesen die Datei, egal was Sie damit versuchen - nicht Hashing, sobald Sie es gelesen haben.

Edit: Ich habe die Frage ein bisschen falsch gelesen. Es dauert genau die gleiche Zeit, um zwei Dateien gleicher Größe zu hashen. 500mb Räume sind 500mb Bytes, die "Raum" darstellen. Das sind immer noch 8 Datenbits pro Byte, genau wie jede andere Datei.

2

Alle Hashes im Allgemeinen und einschließlich MD5 haben keine Leistung abhängig vom Inhalt.

+0

Wie wäre es möglich, dass ein Computer ein kurzes Byte-Array in genau der gleichen Zeit wie ein langes Byte-Array durchläuft? –

+0

Äh, ich sehe was du jetzt sagst. Ein Byte ist ein Leerzeichen, das andere Byte ist nicht - gleiche Größe, anderer Inhalt. Nevermind :) –

3

Da MD5 meist von XOR besteht, AND, OR und NOT-Operationen, die Geschwindigkeit ist nicht abhängig von einem bestimmten Bit eine 1 oder eine 0.


Von http://en.wikipedia.org/wiki/MD5 enthält:

Es gibt vier mögliche Funktionen F; ein anderes wird in jeder Runde verwendet:

Source: http://upload.wikimedia.org/math/c/8/8/c887dfd80049b04ba54abfed7a04bda2.png
Source: http://upload.wikimedia.org/math/e/f/9/ef971bcd2ed5aeb59d6de12bcec32491.png
Source: http://upload.wikimedia.org/math/6/b/2/6b2e2f185f30889f1e37afe9ce29a096.png
Source: http://upload.wikimedia.org/math/c/8/8/c887dfd80049b04ba54abfed7a04bda2.png

Source: http://upload.wikimedia.org/math/d/9/6/d96277da48b2e8f86c7268f480a9e87c.png die XOR bezeichnen, AND, OR und NOT-Operationen sind.

+0

Diese Bilder können verschwinden, wenn die Seite später bearbeitet wird - Sie könnten sie irgendwo spiegeln ... – bdonlan

+0

@bdonlan hat Bilder zu stack.imgur mit Beschreibung unter Angabe der Originalquelle hinzugefügt – FRoZeN

2

Hier ist ein kurzer empirischer Test.

# dd if=/dev/urandom of=randomfile bs=1024 count=512000 
# dd if=/dev/zero of=zerofile bs=1024 count=512000 

# time md5 randomfile 
MD5 (randomfile) = bb318fa1561b17e30d03b12e803262e4 

real 0m2.753s 
user 0m1.567s 
sys 0m1.157s 

# time md5 zerofile 
MD5 (zerofile) = d8b61b2c0025919d5321461045c8226f 

real 0m2.761s 
user 0m1.567s 
sys 0m1.168s 

Dies wird gemäß früheren Antworten unter Anspielung auf die im MD5-Algorithmus verwendeten Bitmanipulationen erwartet.

0

MD5 arbeitet wie die meisten anderen Hash-Algorithmen mit Blöcken. Für jeden 512-Bit-Block des Eingangs führt er dieselbe Operation aus und verwendet den Ausgang als Teil der Eingabe für den nächsten Block.

Die Operation besteht aus den gleichen grundlegenden Operationen (XOR, AND, NOT etc.). Auf allen Prozessoren, die ich kenne, werden diese Operationen die gleiche Zeit dauern, egal was die Argumente sind. Daher sollte die Zeit, die MD5 zur Verarbeitung der Eingabe benötigt, linear in der Anzahl der 512-Bit-Blöcke in der Eingabe sein.