ich einen String anna
haben, in denen Werte von Zeichen in der Zeichenfolge sind a = 1, n = 14 (You can compute the value of other chars like (char - 96)
und Hash-Funktion, die wie folgt aussieht:Finden Sie eine Kollision Zeichenfolge mit einer bestimmten Hash-Funktion
int hashCode(string s) // s = "anna";
{
k = 0;
for (int i = 0; i < s.length(); i++)
k = (7 * k + 3 * s[i]) % 61;
return k;
}
Wie kann ich einen String der Länge finden 3 Wo passiert Kollision (etwas schlaues)? Die einzige Möglichkeit, die mir in den Sinn kommt, ist k
von anna
zu berechnen, was 29
ist und dann irgendwie an eine andere Zeichenfolge der Länge 3 denken, die 29
ergibt.
Sie müssen es bruteforce ich fürchte, ja. –
Ich sehe, dass _61_ ist Prime und du modulierst damit. Willkommen in der Welt des [Discrete Logarithm Problem] (https://en.wikipedia.org/wiki/Discrete_logarithm). – SpencerD
@ Jean-FrançoisFabre: Ich wäre nicht so sicher, es gibt einen Grund, eine gute Einweg-kryptografische Hash-Funktion zu schreiben ist schwer. Das heißt, ich bin kein Krypto- oder Mathe-Experte, also kann ich nicht direkt sagen, wie Sie das richtig umkehren würden, aber wenn Sie über die Länge von drei Kleinbuchstaben sprechen, brauchen Sie das nicht seien Sie clever; der Suchraum ist nur "26 ** 3 == 17.576" Gesamtstrings, so dass sie alle erschöpfend sind, ist trivial. – ShadowRanger