2010-03-12 10 views
11

Ich mache einen MD5-Hash, und will einfach nur das Ergebnis um sicherzustellen, dass:Ist das Ergebnis eines md5-Hash konsistent oder serverabhängig?

md5.ComputeHash(bytePassword); 

konsistent ist, unabhängig von dem Server?

z.B. Fenster 2003/2008 und 32/64 Bit usw.

+3

Machst du einen MD5-Hash, um Kennwörter in deiner Datenbank zu verbergen? Sie sollten nicht http://wblinks.com/notes/storing-passwords-the-wrong-better-and-even-better-way – gingerbreadboy

Antwort

18

Ja, es ist konsequent, die md5 algorithm specification definiert sie unabhängig von der Plattform.

+3

Außer dass ich gesehen habe, dass einige Systeme die Ausgabe mit Großbuchstaben und einige mit niedrigeren darstellen Briefe. Wenn Sie die Zeichenfolgendarstellung der Ausgabe vergleichen, achten Sie darauf, dass die Groß- und Kleinschreibung nicht berücksichtigt wird. –

+2

Mischen Sie die hexadezimale Darstellung (-> String) mit dem MD5-Wert (-> Numerisch) und führen Sie einen Stringvergleich durch? In diesem Fall kann es passieren, dass die gültigen Hexadezimalzeichen Kleinbuchstaben oder Großbuchstaben sind - aber der Wert ist derselbe. Mit anderen Worten: Wenn Sie 0xAa mit 0xaA vergleichen und den Fall als relevant betrachten, dann vergleichen Sie nicht richtig und ich würde das als einen Fehler betrachten. –

+0

Fall ist hier irrelevant, da die Methode ein Array von Bytes zurückgibt - wenn er es in eine Zeichenfolge konvertieren möchte, die die Bytes als hexadezimale Werte darstellt, dann wäre es wichtig. – BrainSlugs83

1

MD5-Hashing ist [System/Zeit/alles außer dem Eingang] unabhängiges

3

Das Ergebnis eines MD5-Hash ist eine Zahl. Die Zahl, die für eine gegebene Eingabe zurückgegeben wird, ist immer dieselbe, egal welcher Server oder sogar welche Plattform Sie verwenden.

Die Ausdruck der Anzahl kann jedoch variieren. Zum Beispiel sind 1 und 1.0 die gleiche Nummer, werden aber anders ausgedrückt. In ähnlicher Weise geben einige Plattformen den Hashwert etwas anders als andere formatiert zurück. In diesem Fall haben Sie ein Byte-Array, und das sollte ziemlich sicher sein, um herumzugehen. Sei einfach vorsichtig, was du tust, nachdem du es in eine Zeichenkette umgewandelt hast.

6

MD5 ist unabhängig von Betriebssystem und Architektur. Es ist also "konsistent".

Jedoch nimmt, MD5 als Eingabe eine beliebige Sequenz von Bits und gibt eine Sequenz von 128 Bits aus. In vielen Situationen möchten Sie Zeichenfolgen. Zum Beispiel möchten Sie ein Passwort hashen, und das Passwort ist anfänglich eine Zeichenfolge. Die Umwandlung dieser Zeichenfolge in eine Sequenz von Bits ist nicht Teil von MD5 selbst, und mehrere Konventionen existieren. Ich weiß nicht genau über C#, aber die Java-Entsprechung String.getBytes() Methode wird die "Plattform Standardzeichensatz" verwenden, die mit der Betriebssysteminstallation variieren kann. In ähnlicher Weise wird die Ausgabe von MD5 oft in eine Zeichenfolge mit hexadezimaler Notation umgewandelt, und sie kann Groß- oder Kleinbuchstaben oder was auch immer sein.

Während also MD5 selbst konsistent ist, lauern oft Fehler in den Teilen, die die Daten für MD5 vorbereiten und seine Ausgabe nachbearbeiten. In acht nehmen.

+0

In C#/.NET sollten Sie angeben, welche Codierung Sie möchten benutze - zum Beispiel: Encoding.UTF8.GetBytes ("Blah"), Encoding.ASCII.GetBytes ("Blah"), Encoding.UTF32.GetBytes ("Blah") ... – BrainSlugs83

Verwandte Themen