====== 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