std.hash
Umfangreiche Hash-Bibliothek mit nicht-kryptografischen Funktionen (FNV1a-32/64, DJB2, Murmur2/3, xxHash-32/64, CRC32, CityHash-32/64, FarmHash-32/64) für Hash-Tables und Datenintegrität sowie kryptografischen Algorithmen: SHA-256, SHA-3 (224/256/512), BLAKE3, SHAKE-128/256. Für Passwort-Speicherung: bcrypt (cost 10), Argon2d/i/id, scrypt und PBKDF2-HMAC-SHA256 mit 100.000 Iterationen.
Einsatzbereiche: Hash-Table-Index-Berechnung, Datenintegrität, Passwort-Hashing (bcrypt/Argon2 empfohlen), Checksummen für Dateiübertragungen.
→ Standard Library · std.crypto · std.crypto.md5 · std.crypto.sha1
Nicht-kryptografische Hash-Funktionen
Schnelle Hash-Funktionen für Hash-Tables, Caches und Datenintegrität — nicht für kryptografische Zwecke:
| Signatur | Beschreibung |
|---|---|
HashFNV1a32(data: pchar): int64 | FNV1a-32-Hash aus Zeichenkette |
HashFNV1a32Bytes(data: pchar, len: int64): int64 | FNV1a-32-Hash aus Byte-Array |
HashFNV1a64(data: pchar): int64 | FNV1a-64-Hash aus Zeichenkette |
HashFNV1a64Bytes(data: pchar, len: int64): int64 | FNV1a-64-Hash aus Byte-Array |
HashDJB2(data: pchar): int64 | DJB2-Hash aus Zeichenkette |
HashMurmur2(data: pchar, seed: int64): int64 | Murmur2-Hash mit Seed |
HashMurmur2Default(data: pchar): int64 | Murmur2-Hash mit Standard-Seed |
HashMurmur3_32(data: pchar, seed: int64): int64 | Murmur3-32-Hash mit Seed |
HashMurmur3_32Default(data: pchar): int64 | Murmur3-32-Hash mit Standard-Seed |
HashCRC32(data: pchar): int64 | CRC32-Prüfsumme (IEEE 802.3) |
HashCity32(data: pchar): int64 | CityHash-32-Hash |
HashCity64(data: pchar): int64 | CityHash-64-Hash |
HashCity64WithSeed(data: pchar, seed: int64): int64 | CityHash-64 mit Seed |
HashCity64Hex(data: pchar): pchar | CityHash-64 als Hex-Zeichenkette |
HashFarm32(data: pchar): int64 | FarmHash-32-Hash |
HashFarm64(data: pchar): int64 | FarmHash-64-Hash |
HashFarm64WithSeed(data: pchar, seed: int64): int64 | FarmHash-64 mit Seed |
HashFarm64Hex(data: pchar): pchar | FarmHash-64 als Hex-Zeichenkette |
HashxxHash32(data: pchar): int64 | xxHash-32-Hash |
HashxxHash64(data: pchar): int64 | xxHash-64-Hash |
HashTableIndex(key: pchar, table_size: int64): int64 | Hash-Table-Index aus Schlüssel (modulo table_size) |
HashBytes(data: pchar, len: int64): int64 | Generischer Hash aus Byte-Array |
HashInt64(key: int64): int64 | 64-Bit-Integer hashen |
HashInt32(key: int64): int64 | 32-Bit-Integer hashen |
VerifyHash(data: pchar, algorithm: int64, expected_hex: pchar): bool | Hash gegen Erwartungswert prüfen |
Kryptografische Hash-Funktionen
Kollisionsresistente Hash-Funktionen für Signaturen, Integritätsprüfungen und MACs:
| Signatur | Ausgabe | Beschreibung |
|---|---|---|
HashSHA256(data: pchar): int64 | 32 Bytes | SHA-256-Hash (NIST FIPS 180-4) |
HashBLAKE3(data: pchar): int64 | 32 Bytes | BLAKE3-Hash (schneller als SHA-256, sicher) |
HashBLAKE3Bytes(data: pchar, len: int64): int64 | 32 Bytes | BLAKE3-Hash aus Byte-Array |
HashBLAKE3Hex(data: pchar): pchar | 64 Zeichen | BLAKE3-Hash als Hex-Zeichenkette |
HashSHA3_224(data: pchar): int64 | 28 Bytes | SHA-3-224-Hash |
HashSHA3_256(data: pchar): int64 | 32 Bytes | SHA-3-256-Hash |
HashSHA3_512(data: pchar): int64 | 64 Bytes | SHA-3-512-Hash |
HashSHA3_256Hex(data: pchar): pchar | 64 Zeichen | SHA-3-256-Hash als Hex-Zeichenkette |
HashKeccak(data: pchar): int64 | 32 Bytes | Keccak-256-Hash (Basis von SHA-3) |
HashSHAKE128(data: pchar, output_bits: int64): int64 | variabel | SHAKE-128-XOF mit variabler Ausgabelänge |
HashSHAKE256(data: pchar, output_bits: int64): int64 | variabel | SHAKE-256-XOF mit variabler Ausgabelänge |
MD5 in std.hash (für Datei-Chunking; für Protokoll-MD5 → std.crypto.md5):
| Signatur | Beschreibung |
|---|---|
HashMD5String(data: pchar): int64 | MD5-Hash aus Zeichenkette als raw int64 |
HashMD5StringHex(data: pchar): pchar | MD5-Hash als 32-Zeichen-Hex |
HashMD5Bytes(data: pchar, len: int64): int64 | MD5-Hash aus Byte-Array |
HashMD5FileInit(): int64 | MD5-Streaming-Zustand initialisieren |
HashMD5FileChunk(chunk: pchar, chunk_len: int64, state: int64): int64 | Einen weiteren Datei-Chunk in den MD5-Zustand einmischen |
HashMD5Quick(data: pchar): int64 | MD5-Hash ohne Zustandsobjekt (kurze Daten) |
MD5Verify(data: pchar, expected_hex: pchar): bool | Daten gegen erwarteten MD5-Hex prüfen |
Passwort-Hashing
Spezialisierte langsame Hash-Funktionen, die Brute-Force-Angriffe durch Rechenaufwand erschweren. Für neue Projekte Argon2id empfohlen:
| Signatur | Beschreibung |
|---|---|
HashBCrypt(password: pchar, cost: int64): int64 | bcrypt-Hash mit Kostenfaktor (Standard: 10) |
HashBCryptWithSalt(password: pchar, salt: pchar, cost: int64): int64 | bcrypt mit eigenem Salt |
HashBCryptHex(password: pchar, cost: int64): pchar | bcrypt-Hash als Hex-Zeichenkette |
HashBCryptFormatted(password: pchar, cost: int64): pchar | bcrypt-Hash im $2b$-Format |
BCryptVerify(password: pchar, hash: int64): bool | Passwort gegen bcrypt-Hash prüfen |
HashArgon2(password: pchar, salt: pchar): int64 | Argon2id-Hash mit Standardparametern |
HashArgon2d(password: pchar, salt: pchar, mem: int64, iter: int64, par: int64): int64 | Argon2d (datenabhängig, GPU-resistent) |
HashArgon2i(password: pchar, salt: pchar, mem: int64, iter: int64, par: int64): int64 | Argon2i (datenunabhängig, Side-Channel-resistent) |
HashArgon2id(password: pchar, salt: pchar, mem: int64, iter: int64, par: int64): int64 | Argon2id (Hybrid, OWASP-empfohlen) |
HashArgon2Hex(password: pchar, salt: pchar): pchar | Argon2-Hash als Hex-Zeichenkette |
HashArgon2Formatted(password: pchar, salt: pchar): pchar | Argon2-Hash im PHC-Stringformat |
Argon2Verify(password: pchar, hash: int64): bool | Passwort gegen Argon2-Hash prüfen |
HashScrypt(password: pchar, salt: pchar, n: int64, r: int64, p: int64): int64 | scrypt mit Parametern (N, r, p) |
HashScryptDefault(password: pchar, salt: pchar): int64 | scrypt mit Standardparametern (N=16384, r=8, p=1) |
HashScryptHex(password: pchar, salt: pchar): pchar | scrypt-Hash als Hex-Zeichenkette |
HashPBKDF2(password: pchar, salt: pchar, iterations: int64): int64 | PBKDF2-HMAC-SHA256 mit Iterationsanzahl |
HashPBKDF2Default(password: pchar, salt: pchar): int64 | PBKDF2 mit 100.000 Iterationen |
HashPBKDF2Hex(password: pchar, salt: pchar, iterations: int64): pchar | PBKDF2-Hash als Hex-Zeichenkette |
HashPassword(password: pchar, salt: pchar): int64 | Allgemeiner Passwort-Hash (intern: Argon2id) |
HashPasswordSimple(password: pchar, salt: int64): int64 | Passwort-Hash mit Integer-Salt |
ComparePasswordHashes(hash1: int64, hash2: int64): bool | Zwei Hashes timing-sicher vergleichen |
GenerateSalt(len: int64): int64 | Kryptografisches Salt via /dev/urandom |
PasswordStrength(password: pchar): int64 | Passwortstärke: 0 (schwach) bis 100 (stark) |
Verwendung
Hash-Table-Index
import std.hash;
fn LookupSlot(key: pchar, table_size: int64): int64 {
return HashTableIndex(key, table_size);
}
fn main(): int64 {
var slot: int64 := LookupSlot("user:42", 1024);
// slot ist 0..1023
return 0;
}
Datei-Checksumme (CRC32)
import std.hash;
import std.fs;
import std.io;
fn ChecksumFile(path: pchar): int64 {
var content: int64 := FsReadAll(path);
if (content == 0) { return 0; }
var crc: int64 := HashCRC32(content as pchar);
free(content, FsFileSize(path));
return crc;
}
Passwort hashen und prüfen (Argon2id)
import std.hash;
import std.alloc;
import std.io;
fn RegisterUser(password: pchar): int64 {
var salt: int64 := GenerateSalt(16);
var hash: int64 := HashArgon2(password, salt as pchar);
// hash in Datenbank speichern; salt ebenfalls (im PHC-Format enthalten)
free(salt, 16);
return hash;
}
fn LoginUser(password: pchar, stored_hash: int64): bool {
return Argon2Verify(password, stored_hash);
}
Kryptografischer Hash (BLAKE3)
import std.hash;
import std.io;
fn main(): int64 {
var hex: pchar := HashBLAKE3Hex("Hello, World!");
PrintLn(hex);
// Ausgabe: 64 Hex-Zeichen
return 0;
}
Hinweise
- Passwort-Hashing: Argon2id ist die OWASP-Empfehlung für neue Projekte. bcrypt ist bewährt; scrypt und PBKDF2 für Kompatibilität mit bestehenden Systemen.
- Kryptografische Integrität: BLAKE3 ist schneller als SHA-256 bei gleicher Sicherheit und für neue Projekte bevorzugt. SHA-3 für Anforderungen, die explizit NIST FIPS 202 verlangen.
- Nicht-kryptografisch: FNV1a und xxHash eignen sich am besten für Hash-Tables; CRC32 für Dateiübertragungen und Protokoll-Prüfsummen (IEEE 802.3).
- MD5 und SHA-1 (Legacy) → std.crypto.md5 bzw. std.crypto.sha1 für protokollspezifische Nutzung.
ComparePasswordHashesnutzt Constant-Time-Vergleich — immer statt direktem==verwenden, um Timing-Angriffe zu vermeiden.GenerateSaltliest aus/dev/urandom— auf Bare-Metal ohne Linux-Kernel muss der Aufrufer ein eigenes CSPRNG bereitstellen.
Verwandte Units
std.crypto.aes— AES-128/256-CBC-Verschlüsselungstd.crypto.md5— MD5 für Protokolle (HTTP Digest, Dateiprüfung)std.crypto.sha1— SHA-1 für MySQL-Auth, Git-Objektestd.net.tls— TLS/HTTPS (OpenSSL-basiert)
Letzte Aktualisierung: 2026-06-05
