Inhaltsverzeichnis

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


Verwandte Units

Letzte Aktualisierung: 2026-06-05