====== 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: MD5 (Legacy), 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), digitale Signaturen, Checksummen für Dateiübertragungen. **Autor:** Andreas Röne\\ **Copyright:** 2024-2025 Andreas Röne ---- ===== Imports ===== * ''[[lyx_-_programmiersprache:units:string|std.string]]'' ---- ===== Konstanten ===== ^ Name ^ Typ ^ Wert ^ Sichtbarkeit ^ | ''FNV_OFFSET_BASIS_32'' | ''int64'' | ''2166136261'' | priv | | ''FNV_PRIME_32'' | ''int64'' | ''16777619'' | priv | | ''FNV_OFFSET_BASIS_64'' | ''int64'' | ''14695981039346656037'' | priv | | ''FNV_PRIME_64'' | ''int64'' | ''1099511628211'' | priv | ---- ===== Funktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''HashFNV1a32(data: pchar): int64'' | pub | FNV1a-32-Hash aus Zeichenkette berechnen | | ''HashFNV1a32Bytes(data: pchar, len: int64): int64'' | pub | FNV1a-32-Hash aus Byte-Array berechnen | | ''HashFNV1a64(data: pchar): int64'' | pub | FNV1a-64-Hash aus Zeichenkette berechnen | | ''HashFNV1a64Bytes(data: pchar, len: int64): int64'' | pub | FNV1a-64-Hash aus Byte-Array berechnen | | ''HashDJB2(data: pchar): int64'' | pub | DJB2-Hash aus Zeichenkette berechnen | | ''MURMUR_M'' | ''int64'' | ''0x5bd1e995'' | priv | Murmur2-Multiplikationskonstante | | ''MURMUR_R'' | ''int64'' | ''24'' | priv | Murmur2-Bit-Rotationskonstante | | ''HashMurmur2(data: pchar, seed: int64): int64'' | pub | Murmur2-Hash mit Seed berechnen | | ''HashMurmur2Default(data: pchar): int64'' | pub | Murmur2-Hash mit Standard-Seed berechnen | | ''CRC32_TABLE'' | ''array[256]int64'' | ''['' | priv | Vorberechnete CRC32-Lookup-Tabelle | | ''HashCRC32(data: pchar): int64'' | pub | CRC32-Prüfsumme berechnen | | ''SHA256_K'' | ''array[64]int64'' | ''['' | priv | SHA-256-Rundenkonstanten-Tabelle | | ''Ch(x: int64, y: int64, z: int64): int64'' | priv | SHA-256-Choice-Hilfsfunktion | | ''Maj(x: int64, y: int64, z: int64): int64'' | priv | SHA-256-Majority-Hilfsfunktion | | ''Rotr(x: int64, n: int64): int64'' | priv | Bitweise Rechtsrotation um n Stellen | | ''Sigma0(x: int64): int64'' | priv | SHA-256-Sigma0-Kompressionsfunktion | | ''Sigma1(x: int64): int64'' | priv | SHA-256-Sigma1-Kompressionsfunktion | | ''Gamma0(x: int64): int64'' | priv | SHA-256-Gamma0-Nachrichterweiterungsfunktion | | ''Gamma1(x: int64): int64'' | priv | SHA-256-Gamma1-Nachrichterweiterungsfunktion | | ''SHA256Add(a: int64, b: int64): int64'' | priv | Modulare Addition für SHA-256 | | ''SHA256RightShift(a: int64, n: int64): int64'' | priv | Logischer Rechtsshift für SHA-256 | | ''HashSHA256(data: pchar): int64'' | pub | SHA-256-Hash aus Zeichenkette berechnen | | ''HashPassword(password: pchar, salt: pchar): int64'' | pub | Passwort mit Salt hashen | | ''HashPasswordSimple(password: pchar, salt: int64): int64'' | pub | Passwort mit Integer-Salt hashen | | ''HashTableIndex(key: pchar, table_size: int64): int64'' | pub | Hash-Table-Index aus Schlüssel berechnen | | ''HashBytes(data: pchar, len: int64): int64'' | pub | Generischen Hash aus Bytes berechnen | | ''HashInt64(key: int64): int64'' | pub | 64-Bit-Integer hashen | | ''HashInt32(key: int64): int64'' | pub | 32-Bit-Integer hashen | | ''MD5_A0'' | ''int64'' | ''0x67452301'' | priv | MD5-Initialisierungskonstante A | | ''MD5_B0'' | ''int64'' | ''0xefcdab89'' | priv | MD5-Initialisierungskonstante B | | ''MD5_C0'' | ''int64'' | ''0x98badcfe'' | priv | MD5-Initialisierungskonstante C | | ''MD5_D0'' | ''int64'' | ''0x10325476'' | priv | MD5-Initialisierungskonstante D | | ''MD5_K'' | ''array[64]int64'' | ''['' | priv | MD5-Sinustabelle für Rundenkonstanten | | ''MD5_ROTL(x: int64, n: int64): int64'' | priv | Bitweise Linksrotation für MD5 | | ''MD5_F(x: int64, y: int64, z: int64): int64'' | priv | MD5-Hilfsfunktion Runde 1 | | ''MD5_G(x: int64, y: int64, z: int64): int64'' | priv | MD5-Hilfsfunktion Runde 2 | | ''MD5_H(x: int64, y: int64, z: int64): int64'' | priv | MD5-Hilfsfunktion Runde 3 | | ''MD5_I(x: int64, y: int64, z: int64): int64'' | priv | MD5-Hilfsfunktion Runde 4 | | ''HashMD5String(data: pchar): int64'' | pub | MD5-Hash aus Zeichenkette als int64 | | ''HashMD5StringHex(data: pchar): pchar'' | pub | MD5-Hash als Hex-Zeichenkette zurückgeben | | ''HashMD5Bytes(data: pchar, len: int64): int64'' | pub | MD5-Hash aus Byte-Array berechnen | | ''HashMD5FileChunk(chunk: pchar, chunk_len: int64, state: int64): int64'' | pub | MD5-Hash eines Datei-Chunks berechnen | | ''HashMD5FileInit(): int64'' | pub | MD5-Dateihash-Zustand initialisieren | | ''HashMD5Quick(data: pchar): int64'' | pub | Schnellen MD5-Hash berechnen | | ''MD5Verify(data: pchar, expected_hex: pchar): bool'' | pub | MD5-Hash gegen Erwartungswert prüfen | | ''HashBLAKE3(data: pchar): int64'' | pub | BLAKE3-Hash aus Zeichenkette berechnen | | ''HashBLAKE3Bytes(data: pchar, len: int64): int64'' | pub | BLAKE3-Hash aus Byte-Array berechnen | | ''HashBLAKE3Hex(data: pchar): pchar'' | pub | BLAKE3-Hash als Hex-Zeichenkette zurückgeben | | ''HashSHA3_224(data: pchar): int64'' | pub | SHA-3-224-Hash berechnen | | ''HashSHA3_256(data: pchar): int64'' | pub | SHA-3-256-Hash berechnen | | ''HashSHA3_512(data: pchar): int64'' | pub | SHA-3-512-Hash berechnen | | ''HashSHA3_256Hex(data: pchar): pchar'' | pub | SHA-3-256-Hash als Hex zurückgeben | | ''HashKeccak(data: pchar): int64'' | pub | Keccak-Hash berechnen | | ''HashSHAKE128(data: pchar, output_bits: int64): int64'' | pub | SHAKE-128-XOF mit variabler Ausgabelänge | | ''HashSHAKE256(data: pchar, output_bits: int64): int64'' | pub | SHAKE-256-XOF mit variabler Ausgabelänge | | ''CITY_C1'' | ''int64'' | ''0xcc9e2d51'' | priv | CityHash-Mischkonstante 1 | | ''CITY_C2'' | ''int64'' | ''0x1b873593'' | priv | CityHash-Mischkonstante 2 | | ''HashCity32(data: pchar): int64'' | pub | CityHash-32-Hash berechnen | | ''CITY_K1'' | ''int64'' | ''0xc6a4a7935bd1e995'' | priv | CityHash64-Schlüsselkonstante 1 | | ''CITY_K2'' | ''int64'' | ''0x9e3779b97f4a7c15'' | priv | CityHash64-Schlüsselkonstante 2 | | ''HashCity64(data: pchar): int64'' | pub | CityHash-64-Hash berechnen | | ''HashCity64WithSeed(data: pchar, seed: int64): int64'' | pub | CityHash-64-Hash mit Seed berechnen | | ''HashCity64Hex(data: pchar): pchar'' | pub | CityHash-64-Hash als Hex zurückgeben | | ''FARM_C1'' | ''int64'' | ''0x1e35a7bd'' | priv | FarmHash-Mischkonstante 1 | | ''FARM_C2'' | ''int64'' | ''0x9e3779b9'' | priv | FarmHash-Mischkonstante 2 | | ''HashFarm32(data: pchar): int64'' | pub | FarmHash-32-Hash berechnen | | ''FARM_K0'' | ''int64'' | ''0xc3a5c85c97cb3127'' | priv | FarmHash64-Schlüsselkonstante K0 | | ''FARM_K1'' | ''int64'' | ''0xb492b66fbe98f273'' | priv | FarmHash64-Schlüsselkonstante K1 | | ''FARM_K2'' | ''int64'' | ''0x9ae16a3b2f90404f'' | priv | FarmHash64-Schlüsselkonstante K2 | | ''HashFarm64(data: pchar): int64'' | pub | FarmHash-64-Hash berechnen | | ''HashFarm64WithSeed(data: pchar, seed: int64): int64'' | pub | FarmHash-64-Hash mit Seed berechnen | | ''HashFarm64Hex(data: pchar): pchar'' | pub | FarmHash-64-Hash als Hex zurückgeben | | ''MURMUR3_C1'' | ''int64'' | ''0xcc9e2d51'' | priv | Murmur3-Mischkonstante 1 | | ''MURMUR3_C2'' | ''int64'' | ''0x1b873593'' | priv | Murmur3-Mischkonstante 2 | | ''MurmurMix(h: int64, k: int64): int64'' | priv | Murmur3-Hash-Mischoperation | | ''HashMurmur3_32(data: pchar, seed: int64): int64'' | pub | Murmur3-32-Hash mit Seed berechnen | | ''HashMurmur3_32Default(data: pchar): int64'' | pub | Murmur3-32-Hash mit Standard-Seed | | ''XXH_PRIME1'' | ''int64'' | ''0x9e3779b185ebc87'' | priv | xxHash-Primzahlkonstante 1 | | ''XXH_PRIME2'' | ''int64'' | ''0xc2b2ae3d27d4eb4'' | priv | xxHash-Primzahlkonstante 2 | | ''XXH_PRIME3'' | ''int64'' | ''0x165667b19e3779f9'' | priv | xxHash-Primzahlkonstante 3 | | ''XXH_PRIME4'' | ''int64'' | ''0x85ebca77c2b2ae63'' | priv | xxHash-Primzahlkonstante 4 | | ''XXH_PRIME5'' | ''int64'' | ''0x27d4eb2f165667c5'' | priv | xxHash-Primzahlkonstante 5 | | ''HashxxHash32(data: pchar): int64'' | pub | xxHash-32-Hash berechnen | | ''HashxxHash64(data: pchar): int64'' | pub | xxHash-64-Hash berechnen | | ''VerifyHash(data: pchar, algorithm: int64, expected_hex: pchar): bool'' | pub | Hash-Wert gegen Algorithmus prüfen | | ''PBKDF2_ITERATIONS'' | ''int64'' | ''100000'' | priv | Standard-Iterationsanzahl für PBKDF2 | | ''PBKDF2HMacSHA256(password: pchar, salt: pchar, iterations: int64): int64'' | priv | PBKDF2-HMAC-SHA256-Kernfunktion | | ''HashPBKDF2(password: pchar, salt: pchar, iterations: int64): int64'' | pub | PBKDF2-Hash mit Iterationsanzahl berechnen | | ''HashPBKDF2Default(password: pchar, salt: pchar): int64'' | pub | PBKDF2-Hash mit Standard-Iterationen | | ''HashPBKDF2Hex(password: pchar, salt: pchar, iterations: int64): pchar'' | pub | PBKDF2-Hash als Hex-Zeichenkette zurückgeben | | ''BCRYPT_COST'' | ''int64'' | ''10'' | priv | Standard-Kostenfaktor für bcrypt | | ''BCRYPT_SALT_LEN'' | ''int64'' | ''16'' | priv | bcrypt-Salt-Länge in Bytes | | ''BCRYPT_HASH_LEN'' | ''int64'' | ''24'' | priv | bcrypt-Hash-Länge in Bytes | | ''BCryptEncryptEksBlowfish(password: pchar, salt: pchar, cost: int64): int64'' | priv | EKS-Blowfish-Verschlüsselung für bcrypt | | ''HashBCrypt(password: pchar, cost: int64): int64'' | pub | bcrypt-Hash mit Kostenfaktor berechnen | | ''HashBCryptWithSalt(password: pchar, salt: pchar, cost: int64): int64'' | pub | bcrypt-Hash mit eigenem Salt berechnen | | ''HashBCryptHex(password: pchar, cost: int64): pchar'' | pub | bcrypt-Hash als Hex zurückgeben | | ''HashBCryptFormatted(password: pchar, cost: int64): pchar'' | pub | bcrypt-Hash im Standardformat ausgeben | | ''BCryptVerify(password: pchar, hash: int64): bool'' | pub | Passwort gegen bcrypt-Hash prüfen | | ''ARGON2_VERSION'' | ''int64'' | ''0x13'' | priv | Argon2-Versionsnummer | | ''ARGON2_DEFAULT_MEMORY'' | ''int64'' | ''65536'' | priv | Standard-Speicherbedarf in Kilobyte | | ''ARGON2_DEFAULT_ITERATIONS'' | ''int64'' | ''3'' | priv | Standard-Iterationsanzahl für Argon2 | | ''ARGON2_DEFAULT_PARALLELISM'' | ''int64'' | ''4'' | priv | Standard-Parallelitätsgrad für Argon2 | | ''Argon2BlockHash(input: pchar, len: int64): int64'' | priv | Argon2-Block-Hash-Hilfsfunktion | | ''Argon2F(data: pchar, segment_len: int64): int64'' | priv | Argon2-Komprimierungsfunktion F | | ''HashArgon2d(password: pchar, salt: pchar,'' | pub | Argon2d-Hash datenabhängig berechnen | | ''HashArgon2i(password: pchar, salt: pchar,'' | pub | Argon2i-Hash datenunabhängig berechnen | | ''HashArgon2id(password: pchar, salt: pchar,'' | pub | Argon2id-Hybrid-Hash berechnen | | ''HashArgon2(password: pchar, salt: pchar): int64'' | pub | Argon2-Hash mit Standardparametern | | ''HashArgon2Hex(password: pchar, salt: pchar): pchar'' | pub | Argon2-Hash als Hex zurückgeben | | ''HashArgon2Formatted(password: pchar, salt: pchar): pchar'' | pub | Argon2-Hash im PHC-Format ausgeben | | ''Argon2Verify(password: pchar, hash: int64): bool'' | pub | Passwort gegen Argon2-Hash prüfen | | ''SCRYPT_N'' | ''int64'' | ''16384'' | priv | scrypt-Kostenparameter N | | ''SCRYPT_r'' | ''int64'' | ''8'' | priv | scrypt-Blockgrößenparameter r | | ''SCRYPT_p'' | ''int64'' | ''1'' | priv | scrypt-Parallelisierungsparameter p | | ''HashScrypt(password: pchar, salt: pchar,'' | pub | scrypt-Hash mit Parametern berechnen | | ''HashScryptDefault(password: pchar, salt: pchar): int64'' | pub | scrypt-Hash mit Standardparametern | | ''HashScryptHex(password: pchar, salt: pchar): pchar'' | pub | scrypt-Hash als Hex zurückgeben | | ''ComparePasswordHashes(hash1: int64, hash2: int64): bool'' | pub | Zwei Passwort-Hashes sicher vergleichen | | ''GenerateSalt(len: int64): int64'' | pub | Kryptografisches Salt generieren | | ''PasswordStrength(password: pchar): int64'' | pub | Passwortstärke als Zahlenwert bewerten |