2017-06-26 5 views
0

Ich habe eine große JSON-Zeichenfolge in Javascript, die ich in einen kurzen Hash konvertieren möchte, und das solution scheint zu arbeiten.Gibt es eine Möglichkeit, diese JavaScript-Hash-Funktion umzukehren?

String.prototype.hashCode = function(){ 
    var hash = 0; 
    if (this.length == 0) return hash; 
    for (i = 0; i < this.length; i++) { 
     char = this.charCodeAt(i); 
     hash = ((hash<<5)-hash)+char; 
     hash = hash & hash; // Convert to 32bit integer 
    } 
    return hash; 
} 

Aber gibt es eine Möglichkeit, die ich zurück in diese JSON-Zeichenfolge konvertieren kann?

+0

Die kurze Antwort ist nein. Hashes enthalten nicht die Informationen, die zum Rekonstruieren der Eingabe erforderlich sind. – smcd

+0

Es kann "möglich" sein, aber Sie sollten nicht. Es ist nicht zuverlässig, Hashing soll ein Weg sein. – Damon

Antwort

2

Hashes sind speziell nicht reversibel. Das ist eine der Haupteigenschaften von ihnen, die sie in der Kryptographie nützlich machen.

Ich denke, die Frage ist: Was wollen Sie eigentlich erreichen? Denn was auch immer es ist, es klingt wie ein Hash ist nicht die Antwort.

https://en.wikipedia.org/wiki/Hash_function

Eine kryptographische Hash-Funktion erlaubt ihm, leicht zu verifizieren, dass einige Eingangsdatenkarten zu einem bestimmten Hash-Wert, aber wenn die Eingabedaten unbekannt sind, es absichtlich schwierig ist, es zu rekonstruieren (oder gleichwertige Alternativen), indem Sie den gespeicherten Hash-Wert kennen.

(Hervorhebung von mir)

Was Sie wollen, ist nicht, aber Kompression Hashing. Suchen Sie nach einem Zip-Modul für Javascript. Für JSON im Klartext können Sie wahrscheinlich Kompressionsraten von ~ 90% erwarten (abhängig vom Inhalt). Eine schnelle Google-Suche zeigt, dass es eine Million von ihnen gibt, so dass Sie eine finden müssen, die zu Ihrem spezifischen Anwendungsfall passt.

+0

Dann denke ich, dass ich die Frage neu formulieren kann, kann ich irgendwie ein langes Stück Schnur in ein kürzeres Stück kodieren, das ich zurück in das Original umkehren kann. Es ist nicht vertraulich oder so. Es ist nur ein Problem mit der Länge. – omega

+3

Was Sie wollen, ist nicht Hashing, sondern Komprimierung. Suchen Sie nach einem Zip-Modul für Javascript. Für JSON im Klartext können Sie wahrscheinlich Kompressionsraten von ~ 90% erwarten (abhängig vom Inhalt) –

1

Nein, es gibt keine Möglichkeit, einen Hash zurück in die Zeichenfolge zu konvertieren, aus der er erstellt wurde. Der Zweck einer Hash-Funktion besteht darin, jede lange Zeichenfolge einer kürzeren Zeichenfolge zuzuordnen - es ist einfach zu beweisen, dass es mehr lange Zeichenfolgen als kurze Zeichenfolgen gibt, die aus vorhandenen Zeichen erstellt werden können.

Es gibt mehrere Zeichenfolgen, die jeder Hash-Zeichenfolge zugeordnet sind, und es ist nicht möglich festzustellen, welche Zeichenfolge zum Erstellen der Hash-Zeichenfolge verwendet wurde. Es ist unwahrscheinlich, dass Sie jemals zwei Strings finden, die auf die gleiche Hash-Zeichenkette abbilden, die die Basis von Hash-Funktionen ist, aber gleichzeitig existieren sie auch.

Tatsächlich sind Hash-Funktionen kryptografisch sicher, weil es nicht möglich ist, die Zeichenfolge zu bestimmen, aus der ein Hash erstellt wurde, wenn Sie nur die Hash- und die Hash-Funktion haben.

Verwandte Themen