Bei Study anmelden

Diese Seite ist der öffentliche eMedys-Auftritt. Dein Konto und deine privaten Inhalte laufen auf Study; die Anmeldung öffnet sich dort in einem eigenen Fenster.

Ein Inhalts-Hash braucht einen erklärten Zweck

Kanonische Darstellung, relevante Werte und Herkunftsnachweise trennen.

Ein Hash fasst Bytes zusammen. Welche fachlichen Änderungen er erkennen kann, hängt davon ab, welche Felder in diese Bytes eingehen. Ein Hash nur aus ID und Art übersieht geänderte Vorher-/Nachher-Werte. Unser Inhaltsvertrag umfasst Formatversion und relevante Werte. Für eine hier reihenfolgeunabhängige Ereignismenge sortieren wir nach eindeutiger ID und serialisieren mit festen Regeln. Für geordnete Schritte wäre Sortieren dagegen ein Informationsverlust. Der kleine JSON-Vertrag erlaubt nur einfache, wohldefinierte Werte; Datentypen und Normalisierung brauchen bei Erweiterungen neue Regeln. Ein normaler Inhalts-Hash authentifiziert keinen Autor und verhindert kein gemeinsames Umschreiben von Daten und Hash.

Ein Beispiel

Zwei Listen enthalten dieselben Objekte in umgekehrter Reihenfolge: Ihr Hash bleibt nach unserem Mengenvertrag gleich. Ändert stock:hammer seinen after-Wert von 4 auf 9, muss der Hash wechseln. Das Codebeispiel benutzt nur erfundene Ganzzahlen und Zeichenfolgen; es ist kein allgemeiner Standard für kanonisches JSON und keine digitale Signatur. Python 3.11 · Lehrbeispiel import hashlib import json def content_hash(items): payload = {"version": 1, "items": sorted(items, key=lambda x: x["id"])} raw = json.dumps(payload, sort_keys=True, separators=(",", ":"), allow_nan=False) return hashlib.sha256(raw.encode("utf-8")).hexdigest() a = [{"id": "tool-a", "after": 4}, {"id": "tool-b", "after": 2}] b = [{"id": "tool-a", "after": 9}, {"id": "tool-b", "after": 2}] print(content_hash(a) == content_hash(list(reversed(a)))) print(content_hash(a) == content_hash(b)) Erwartete Ausgabe True False

Mit meinem Konto üben →

Alle Lernwege