2016-07-07 6 views
0

Ich glaube, ich glaube, dass eine Hash-Ausgabe der gleichen Iteration Anzahl der gleichen Eingabe immer die gleiche ergibt.Sind zwei Hash-Ausgaben derselben Iteration von verschiedenen Eingaben immer unterschiedlich?

Sagen wir zwei verschiedene Eingaben.

static byte[] hash(byte[] bytes, final int count) 
    throws NoSuchAlgorithmException { 
    final MessageDigest digest = MessageDigest.getInstance("SHA-256"); 
    for (int i = 0; i < count; i++) { 
     bytes = digest.digest(bytes); 
    } 
    return bytes; 
} 

Mit zwei verschiedenen Eingang, werden zwei Ausgänge mit gleichen zählen immer anders?

byte[] john = digest("john".getBytes(), 1024); 
byte[] jane = digest("jane".getBytes(), 1024); 

Ich plane meine Datenbank Benutzernamen Spalte als BINARY(32) und ich frage mich, zu definieren, ob ich die Spalte eindeutig festgelegt ist oder nicht.

Antwort

1

Alle Hashes kollidieren offensichtlich irgendwann, für die Eingabe von Länge größer als die Größe des Digest. Darüber hinaus gibt es nur wenige Versuche, Kollisionen zu garantieren, die selbst bei Eingaben auftreten, die nahe bei der Größe liegen, was bei typischen, pedantischen oder ähnlichen Eingaben der Fall ist der Hashwert.

(zum Beispiel hat ein CRC garantiert verschiedene Hashes für Eingaben, die sich um ein einzelnes Bit ändern - aber sichere Hashes können das nicht bieten)

Verwandte Themen