Es ist sicherlich nicht sicher genug für eine Situation, in der das Erraten von Werten Informationen enthüllen kann.
Zumindest einige der Überschreibungen sind nicht sicher genug, um angesichts von als Hash-Code verwendet zu werden Beliebige vom Benutzer ausgewählte Eingaben (mit Javas String.hashCode ()
überschreiben ist es wirklich einfach, einen Hash-DoS-Angriff gegen alles durchzuführen).
In Fällen, in denen Sie eine Kennung wünschen, Ich empfehle, einen einfachen Bezeichner (z. B. einen numerischen Schlüssel in einer Datenbank, eine atomar inkrementierte Ganzzahl, die ein Schlüssel für eine Hash-Tabelle ist usw.) zu verwenden und dann einen kryptografischen Hash davon und ein Salt anzuhängen.
Das heißt, Ihre öffentlich zugängliche ID hätte die Form (in sprachunabhängiger Form):
Verketten (PrivateID, HexString (SHA256 (UTF8Bytes (Verketten (Salt, PrivateID))))
(Sie können einen Teil des Hashs für eine kleinere ID entfernen, um die Zeit bis zur Brute-Force zu verkürzen.)
Dann erhalten Sie die private ID als eine Teilzeichenfolge, und die vollständige ID kann erneut überprüft werden. Das allgemeine Verfahren lässt sich auch leicht zwischen Sprachen portieren.
Die Handvoll CPU-Zyklen, die dies kosten wird, werden im Vergleich zum Rest des Systems keine großen Auswirkungen haben, es sei denn, Ihr System ist so trivial, dass Sie Es wird sowieso nicht viel CPU verbraucht. Wenn Sie dies also nicht auf einem Gerät mit sehr geringem Stromverbrauch ausführen (wie in, weitaus weniger leistungsstark als ein billiges Telefon), ist dies kein Problem.
In Fälle, in denen Sie tatsächlich einen Hash-Code als Hash-Code verwenden möchten und sich mit benutzerdefinierten Eingaben befassen müssen, verwenden Sie dann einen Startwert-Hash-Algorithmus (z. B. SpookyHash) und stützen Sie Ihren Startwert auf die Startzeit (oder noch besser auf die Startzeit). eine Mischung aus Startzeit und der Zeit, zu der Sie den Hash-Container erstellen). (Nichts mit kryptografischen Hashes zu tun, daher können sie viel schneller sein. Das einzige Sicherheitsrisiko, das dadurch vermieden wird, ist Hash-DoSing.)