Was Sie tun, ist per se keine "Verschlüsselung"; es ist "Hashing". Der wesentliche Unterschied zwischen den beiden ist , dass die Verschlüsselung ist leicht umkehrbar (mit dem richtigen Schlüssel natürlich), während Hashing ausgelegt ist äußerst schwierig, andere unter allen Umständen rückgängig als die ursprüngliche Nachricht an erster Stelle zu kennen.
Theoretisch simulieren Hashes ein "zufälliges Orakel", einen hypothetischen Homunkulus mit einem eidetischen Gedächtnis und eine Möglichkeit, vollkommen eindeutige, vollkommen zufällige Zahlen ohne obere Bereichsgrenze zu erzeugen. Sie würden diesem kleinen Mann eine Nachricht geben, und eines von zwei Dingen würde passieren; Entweder hat er die Nachricht noch nie gesehen. In diesem Fall generiert er eine neue Zufallszahl und gibt diese als Digest an, oder er hat diese Nachricht schon einmal gesehen. Er erinnert sich und gibt Ihnen die Nummer, die er generiert hat, als er sie gesehen hat erstes Mal. In diesem theoretischen Modell gibt es keine Beziehung zwischen einer Nachricht und ihrem Digest, und da keine einzelne Zahl jemals zweimal im RNG erscheint, besteht keine Möglichkeit für eine Kollision.
Leider haben wir kein ideales zufälliges Orakel; Die Idee hat praktische Unmöglichkeiten für eine digitale Implementierung, wie die Fähigkeit des Orakels, jede Nachricht, die jemals von irgendjemandem gehasht wurde, effizient zu speichern und effizient abzurufen, und die Fähigkeit der Kunden, eine Zahl zu akzeptieren, die Hunderte oder Tausende von Dezimalstellen umfassen kann in der Länge. Stattdessen haben wir Hash-Funktionen, die irreversible (Einweg-) mathematische Operationen sind, die an der Nachricht selbst arbeiten, um eine deterministische Transformation (dieselbe Nachricht => gleicher Hash) ohne erkennbaren Wert zu erstellenBeziehung zwischen dem Hash und der ursprünglichen Nachricht. Wie in den Kommentaren erwähnt, sollte es auch keine vorhersehbare Änderung des Hash-Werts geben, die durch systematische Änderungen an der Nachricht erzeugt wird. Im Idealfall hätte jedes Bit des Digests eine 50% ige Chance, sich zu ändern, wenn ein einzelnes Bit der Nachricht geändert wird.
Es gibt viele Verwendungsmöglichkeiten für eine Hash-Funktion. Sie werden zur Überprüfung von Herausforderungen verwendet (denken Sie an Anmeldeinformationen wie Kennwörter), ohne dass beide Parteien das Klartextgeheimnis kennen müssen, und sie werden als Prüfsummen verwendet, um zu überprüfen, ob eine Nachricht nicht manipuliert oder beschädigt wurde. Sie werden auch in sogenannten "Proof of Work" -Szenarien verwendet. Rechenaufgaben, die schwer zu erledigen, aber leicht zu überprüfen sind.
Wenn Sie jemals einen Weg finden würden, einen SHA256-Hash-Digest effizient umzukehren, um eine Nachricht (eine beliebige Nachricht) zu erzeugen, die zu diesem Hash führen würde, wäre dies ein Beweis dafür, dass der Hash tatsächlich grundlegend fehlerhaft ist. SHA256 wird in der Tat als sicher angesehen, was bedeutet, dass es keine dokumentierte Methode gibt, egal wie praktisch sie ist, um mit einem Hash-Digest zu beginnen und eine kollidierende Nachricht zu erstellen, die weniger Arbeit erfordert, als einfach jede Möglichkeit auszuprobieren (was für SHA-256 idealerweise 2 ist ^ 256 ~ = 10 ^ 77 Möglichkeiten).