====== std.crypto.md5 ====== MD5 Message-Digest Algorithm (RFC 1321): Pure-Lyx-Implementierung ohne externe Abhängigkeiten. Liefert einen 16-Byte-Rohdigest (''MD5'') oder einen 32-Zeichen-Hex-String in Kleinbuchstaben (''MD5Hex'', ''MD5HexStr''). Gedacht für Checksummen und Protokoll-Kompatibilität — **nicht** für kryptografische Sicherheitszwecke. → [[lyx_-_programmiersprache:units|Standard Library]] · [[lyx_-_programmiersprache:units:crypto:sha1|std.crypto.sha1]] · [[lyx_-_programmiersprache:units:crypto:aes|std.crypto.aes]] ---- ===== Funktionen ===== ^ Signatur ^ Beschreibung ^ | ''MD5(data: int64, len: int64, out: int64)'' | Berechnet den MD5-Digest von ''len'' Bytes ab ''data'' und schreibt 16 Roh-Bytes in ''out'' (''alloc(16)'') | | ''MD5Hex(data: int64, len: int64, out: int64)'' | Wie ''MD5'', schreibt aber 32 Kleinbuchstaben-Hex-Zeichen + NUL in ''out'' (''alloc(33)'') | | ''MD5HexStr(data: pchar, len: int64, out: int64)'' | Convenience-Wrapper für ''MD5Hex'' mit ''pchar''-Eingabe | ---- ===== Verwendung ===== ==== Datei-Checksum ==== import std.crypto.md5; import std.alloc; import std.io; fn PrintMD5(data: int64, len: int64): void { var hex: int64 := alloc(33); MD5Hex(data, len, hex); PrintLn(hex as pchar); free(hex, 33); } ==== String hashen ==== import std.crypto.md5; import std.alloc; import std.string; fn HashString(s: pchar): int64 { var len := StrLen(s); var out: int64 := alloc(33); MD5HexStr(s, len, out); return out; // Aufrufer muss free(out, 33) aufrufen } ==== Roher 16-Byte-Digest ==== import std.crypto.md5; import std.alloc; fn ComputeRawDigest(data: int64, len: int64): int64 { var digest: int64 := alloc(16); MD5(data, len, digest); return digest; // Aufrufer muss free(digest, 16) aufrufen } ==== PostgreSQL MD5-Auth (intern) ==== ''std.db.postgres'' verwendet ''MD5Hex'' intern zur Berechnung der MD5-Authentifizierungsantwort: // inner = MD5Hex(password + user) // outer = MD5Hex(inner + salt[4 Bytes]) // response = "md5" + outer ---- ===== Hinweise ===== * MD5 ist kollisionsanfällig — nicht für Passwort-Hashing oder digitale Signaturen verwenden. Für Sicherheitszwecke ''std.crypto.sha1'' oder ''std.crypto.aes'' nutzen. * Die Implementierung ist vollständig in Lyx geschrieben (keine C-Bibliothek) und arbeitet korrekt auf Little-Endian x86-64. * ''MD5Hex'' schreibt genau 33 Bytes (32 Hex-Zeichen + NUL) — der Puffer muss mindestens 33 Bytes groß sein. * Für leere Eingaben (''len=0'') liefert ''MD5Hex'' ''„d41d8cd98f00b204e9800998ecf8427e"''. ---- ===== Verwandte Units ===== * ''[[lyx_-_programmiersprache:units:crypto:sha1|std.crypto.sha1]]'' — SHA-1 (stärker als MD5) * ''[[lyx_-_programmiersprache:units:crypto:aes|std.crypto.aes]]'' — AES-Verschlüsselung * ''[[lyx_-_programmiersprache:units:db:postgres|std.db.postgres]]'' — verwendet MD5 für die PostgreSQL-Authentifizierung Letzte Aktualisierung: 2026-06-05