Gibt es eine Klasse von Hash-Algorithmen, ob theoretisch oder praktisch, so dass ein Algorithmus in der Klasse gemäß der unten angegebenen Definition als "reflexiv" betrachtet werden kann:
- hash1 = algo1 ("Eingabetext 1")
- hash1 = algo1 ("Eingabetext 1" + hash1)
Der Operator + kann eine Verkettung oder eine andere angegebene Operation sein, um die Ausgabe (Hash1) wieder in die Eingabe ("Eingabetext 1") zu kombinieren, sodass der Algorithmus (algo1) genau das gleiche Ergebnis liefert. dh Kollision bei Eingabe und Eingabe + Ausgabe. Der Operator + muss die Gesamtheit beider Eingaben kombinieren, und der Algo darf einen Teil der Eingabe nicht verwerfen.
Der Algorithmus muss eine hohe Entropie in der Ausgabe erzeugen. Es kann, muss aber nicht kryptografisch schwierig sein, die Ausgabe auf eine oder beide mögliche Eingaben zurückzusetzen.
Ich bin kein Mathematiker, aber eine gute Antwort könnte einen Beweis dafür enthalten, warum eine solche Klasse von Algorithmen nicht existieren kann. Dies ist jedoch keine abstrakte Frage. Ich bin wirklich daran interessiert, einen solchen Algorithmus in meinem System zu verwenden, falls es einen gibt.
Dies ist ein Duplikat einer Frage, die zuerst unter /programming/4823680/reflexive-hash veröffentlicht wurde
quelle
Antworten:
Ich gebe eine triviale Konstruktion, die die Anforderung erfüllt. Ich stelle es zur Verfügung, um lediglich die Existenz einer "reflexiven" Hash-Funktion zu beantworten .
Sei eine beliebige Hash-Funktion, die eine hohe Entropie in der Ausgabe erzeugt. Angenommen, G hasst Binärzeichenfolgen beliebiger Länge mit Binärzeichenfolgen k- Bit, wobei k eine positive ganze Zahl ist. Sei + der Verkettungsoperator und sei | x | bezeichnen die Länge der Binärzeichenfolge x .G G k k + |x| x
Definieren Sie die Hash-Funktion am Eingang x wie folgt:H x
Wie gesagt, dies ist eine triviale Konstruktion. Es kann auf jede Hash-Funktion angewendet werden, praktisch (wie MD5, SHA-1, ...) oder theoretisch.
quelle