DevToolBoxFREE
BlogAdvertise

MD5 & SHA-256 Hash-Generator: Vollstandiger Leitfaden mit Code-Beispielen

12 Min. Lesezeitvon DevToolBox

Hash-Funktionen gehoren zu den wichtigsten Bausteinen in der Informatik und Cybersicherheit. Taglich verlassen sich Entwickler auf MD5-Hash-Generatoren, SHA-256-Hash-Berechnungen und andere Hashing-Algorithmen zur Uberprufung der Dateiintegritat, sicheren Passwortspeicherung und Blockchain-Technologie. Dieser umfassende Leitfaden deckt alles ab, von der grundlegenden Theorie bis zu praktischen Codebeispielen in JavaScript, Python, Bash und PowerShell.

Testen Sie unseren kostenlosen Online-Hash-Generator — MD5, SHA-1, SHA-256, SHA-512.

Was ist eine Hash-Funktion?

Eine Hash-Funktion ist ein mathematischer Algorithmus, der eine Eingabe beliebiger Grosse nimmt und eine Ausgabe fester Grosse erzeugt. Zum Beispiel ist der MD5-Hash von "hello" immer 5d41402abc4b2a76b9719d911017c592.

Hash-Funktionen haben vier wesentliche Eigenschaften: Deterministisch, Feste Ausgabelange, Einweg (Preimage-Resistenz) und Lawineneffekt — eine kleine Anderung der Eingabe andert den Hash komplett.

Kollisionsresistenz ist entscheidend fur kryptografische Hash-Funktionen. SHA-256 bleibt sicher, wahrend MD5 und SHA-1 bekannte Kollisionsschwachstellen haben.

Vergleich gangiger Hash-Algorithmen

Hier ist ein Vergleich der popularsten Hash-Algorithmen:

AlgorithmOutput SizeHex LengthSecurity StatusSpeedUse Cases
MD5128 bits32 charsBroken (2004)Very FastChecksums, caching
SHA-1160 bits40 charsBroken (2017)FastGit (legacy), fingerprints
SHA-256256 bits64 charsSecureModerateSignatures, blockchain, TLS
SHA-512512 bits128 charsSecureModerateHigh-security applications

MD5 erzeugt einen 128-Bit-Digest und ist seit 2004 kryptografisch gebrochen. SHA-1 erzeugt 160 Bit und wurde 2017 durch Google praktisch angegriffen. SHA-256 erzeugt 256 Bit und bleibt sicher. SHA-512 erzeugt 512 Bit mit groesserem Sicherheitsspielraum.

Fur sicherheitskritische Anwendungen verwenden Sie SHA-256 oder SHA-512.

Wie Hash-Funktionen funktionieren

Die meisten modernen Hash-Funktionen folgen der Merkle-Damgard-Konstruktion in drei Hauptphasen:

1. Nachrichtenpadding: Die Nachricht wird aufgefullt, damit ihre Lange ein Vielfaches der Blockgrosse wird (512 Bit fur SHA-256).

2. Blockverarbeitung: Die aufgefullte Nachricht wird in Blocke fester Grosse geteilt und durch eine Kompressionsfunktion mit Bitoperationen und Rotationen verarbeitet.

3. Endausgabe: Nach Verarbeitung aller Blocke ist der letzte Verkettungswert der Hash-Digest.

Selbst eine einzelne Bitanderung in der Eingabe erzeugt einen vollig anderen Hash (Lawineneffekt).

Praktische Anwendungsfalle

Hash-Funktionen werden uberall in der modernen Informatik verwendet:

Dateiintegritatsprufung: Vergleichen Sie den SHA-256-Hash einer heruntergeladenen Datei mit dem veroffentlichten Wert.

Passwortspeicherung: Sichere Anwendungen hashen Passworter mit bcrypt, scrypt oder Argon2 statt sie im Klartext zu speichern.

Digitale Signaturen: Die Software berechnet einen Hash des Dokuments und verschlusselt ihn mit dem privaten Schlussel. TLS/SSL-Zertifikate basieren auf Hash-Funktionen.

Git-Versionskontrolle: Git verwendet SHA-1-Hashes zur eindeutigen Identifizierung jedes Commits.

Blockchain: Bitcoin verwendet doppeltes SHA-256 fur Blockheader und Transaktionsverifizierung.

Deduplizierung und Caching: Cloud-Speicher verwenden Hashes zur Erkennung doppelter Dateien ohne Byte-fur-Byte-Vergleich.

Hash-Generierung Codebeispiele

JavaScript (Browser und Node.js)

Verwenden Sie crypto.subtle.digest im Browser und das crypto-Modul in Node.js:

// ===== Browser: Web Crypto API (SHA-256) =====

async function sha256(message) {
  const encoder = new TextEncoder();
  const data = encoder.encode(message);
  const hashBuffer = await crypto.subtle.digest('SHA-256', data);
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}

// Usage
const hash = await sha256('Hello World');
console.log(hash);
// "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e"

// Supports SHA-1, SHA-256, SHA-384, SHA-512
async function hashDigest(message, algorithm = 'SHA-256') {
  const data = new TextEncoder().encode(message);
  const buffer = await crypto.subtle.digest(algorithm, data);
  return Array.from(new Uint8Array(buffer))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

await hashDigest('hello', 'SHA-1');    // "aaf4c61d..."
await hashDigest('hello', 'SHA-256');  // "2cf24dba..."
await hashDigest('hello', 'SHA-512');  // "9b71d224..."

// ===== Node.js: crypto module =====

const crypto = require('crypto');

// MD5 hash
const md5 = crypto.createHash('md5').update('Hello World').digest('hex');
console.log(md5); // "b10a8db164e0754105b7a99be72e3fe5"

// SHA-1 hash
const sha1 = crypto.createHash('sha1').update('Hello World').digest('hex');
console.log(sha1); // "0a4d55a8d778e5022fab701977c5d840bbc486d0"

// SHA-256 hash
const sha256 = crypto.createHash('sha256').update('Hello World').digest('hex');
console.log(sha256); // "a591a6d40bf420404a011733cfb7b190..."

// SHA-512 hash
const sha512 = crypto.createHash('sha512').update('Hello World').digest('hex');
console.log(sha512); // "2c74fd17edafd80e8447b0d46741ee24..."

// Hash a file
const fs = require('fs');
function hashFile(filePath, algorithm = 'sha256') {
  return new Promise((resolve, reject) => {
    const hash = crypto.createHash(algorithm);
    const stream = fs.createReadStream(filePath);
    stream.on('data', data => hash.update(data));
    stream.on('end', () => resolve(hash.digest('hex')));
    stream.on('error', reject);
  });
}

const fileHash = await hashFile('./package.json', 'sha256');

Python (hashlib)

Python bietet das hashlib-Modul fur MD5, SHA-1, SHA-256 und andere:

import hashlib

# MD5 hash
md5_hash = hashlib.md5("Hello World".encode('utf-8')).hexdigest()
print(md5_hash)  # "b10a8db164e0754105b7a99be72e3fe5"

# SHA-1 hash
sha1_hash = hashlib.sha1("Hello World".encode('utf-8')).hexdigest()
print(sha1_hash)  # "0a4d55a8d778e5022fab701977c5d840bbc486d0"

# SHA-256 hash
sha256_hash = hashlib.sha256("Hello World".encode('utf-8')).hexdigest()
print(sha256_hash)  # "a591a6d40bf420404a011733cfb7b190..."

# SHA-512 hash
sha512_hash = hashlib.sha512("Hello World".encode('utf-8')).hexdigest()
print(sha512_hash)  # "2c74fd17edafd80e8447b0d46741ee24..."

# Hash a file (memory-efficient for large files)
def hash_file(filepath, algorithm='sha256'):
    h = hashlib.new(algorithm)
    with open(filepath, 'rb') as f:
        for chunk in iter(lambda: f.read(8192), b''):
            h.update(chunk)
    return h.hexdigest()

file_hash = hash_file('document.pdf', 'sha256')
print(f"SHA-256: {file_hash}")

# Compare file hashes for integrity verification
def verify_integrity(filepath, expected_hash, algorithm='sha256'):
    actual_hash = hash_file(filepath, algorithm)
    return actual_hash == expected_hash

# List all available hash algorithms
print(hashlib.algorithms_available)
# {'md5', 'sha1', 'sha256', 'sha512', 'sha3_256', ...}

Bash / Linux

Linux und macOS bieten md5sum, sha256sum und openssl dgst:

# MD5 hash of a string
echo -n "Hello World" | md5sum
# b10a8db164e0754105b7a99be72e3fe5  -

# SHA-1 hash of a string
echo -n "Hello World" | sha1sum
# 0a4d55a8d778e5022fab701977c5d840bbc486d0  -

# SHA-256 hash of a string
echo -n "Hello World" | sha256sum
# a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e  -

# SHA-512 hash of a string
echo -n "Hello World" | sha512sum
# 2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f2...  -

# Hash a file
md5sum package.json
sha256sum package.json
sha512sum package.json

# Using openssl (works on both Linux and macOS)
echo -n "Hello World" | openssl dgst -md5
echo -n "Hello World" | openssl dgst -sha1
echo -n "Hello World" | openssl dgst -sha256
echo -n "Hello World" | openssl dgst -sha512

# Hash a file with openssl
openssl dgst -sha256 package.json

# macOS uses shasum instead of sha256sum
echo -n "Hello World" | shasum -a 256
echo -n "Hello World" | shasum -a 512

# Verify a downloaded file against a known hash
echo "expected_hash_here  filename" | sha256sum --check

# Hash all files in a directory
find . -type f -exec sha256sum {} \;

PowerShell (Get-FileHash)

PowerShell bietet Get-FileHash fur Dateien und .NET-Klassen fur Strings:

# Hash a file with Get-FileHash (SHA-256 is default)
Get-FileHash -Path "C:\document.pdf"
Get-FileHash -Path "C:\document.pdf" -Algorithm MD5
Get-FileHash -Path "C:\document.pdf" -Algorithm SHA1
Get-FileHash -Path "C:\document.pdf" -Algorithm SHA256
Get-FileHash -Path "C:\document.pdf" -Algorithm SHA512

# Hash a string (MD5)
$md5 = [System.Security.Cryptography.MD5]::Create()
$bytes = [System.Text.Encoding]::UTF8.GetBytes("Hello World")
$hash = $md5.ComputeHash($bytes)
$hashString = [BitConverter]::ToString($hash).Replace("-", "").ToLower()
Write-Output $hashString
# "b10a8db164e0754105b7a99be72e3fe5"

# Hash a string (SHA-256)
$sha256 = [System.Security.Cryptography.SHA256]::Create()
$bytes = [System.Text.Encoding]::UTF8.GetBytes("Hello World")
$hash = $sha256.ComputeHash($bytes)
$hashString = [BitConverter]::ToString($hash).Replace("-", "").ToLower()
Write-Output $hashString
# "a591a6d40bf420404a011733cfb7b190..."

# Reusable function for string hashing
function Get-StringHash {
    param(
        [string]$InputString,
        [string]$Algorithm = "SHA256"
    )
    $hasher = [System.Security.Cryptography.HashAlgorithm]::Create($Algorithm)
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($InputString)
    $hash = $hasher.ComputeHash($bytes)
    return [BitConverter]::ToString($hash).Replace("-", "").ToLower()
}

Get-StringHash "Hello World" "MD5"
Get-StringHash "Hello World" "SHA256"
Get-StringHash "Hello World" "SHA512"

# Verify file integrity
$expected = "a591a6d40bf420404a011733cfb7b190..."
$actual = (Get-FileHash -Path "file.zip" -Algorithm SHA256).Hash.ToLower()
if ($actual -eq $expected) { "MATCH" } else { "MISMATCH" }

MD5 vs SHA-256: Was sollten Sie verwenden?

MD5 ist kryptografisch gebrochen — Kollisionen konnen in Sekunden generiert werden. Fur sicherheitsrelevante Anwendungen ist MD5 nicht sicher.

MD5 akzeptabel: Nicht-kryptografische Prufsummen, Cache-Schlussel, Deduplizierung, HTTP-ETags.

SHA-256 erforderlich: Digitale Signaturen, Zertifikate, Passwort-Hashing, Blockchain, Code-Signierung, HMAC fur API-Authentifizierung.

Fazit: Im Zweifelsfall immer SHA-256 wahlen.

Best Practices fur Hash-Sicherheit

Hier sind wesentliche Best Practices fur Entwickler:

Hashen Sie Passworter nie mit einfachem MD5/SHA-256: Verwenden Sie bcrypt, scrypt oder Argon2.

Verwenden Sie immer Salts: Ein Salt ist ein zufalliger, benutzerspezifischer Wert, der vor dem Hashen angehangt wird und Rainbow-Table-Angriffe verhindert.

Verwenden Sie HMAC fur Nachrichtenauthentifizierung: HMAC-SHA256 ist der Industriestandard fur API-Authentifizierung.

Vermeiden Sie Length-Extension-Angriffe: Verwenden Sie HMAC statt Hash(secret + message).

Vergleichen Sie Hashes in konstanter Zeit: Verwenden Sie crypto.timingSafeEqual() in Node.js oder hmac.compare_digest() in Python.

Haufig gestellte Fragen

Was ist der Unterschied zwischen MD5 und SHA-256?

MD5 erzeugt einen 128-Bit-Hash und ist kryptografisch gebrochen. SHA-256 erzeugt einen 256-Bit-Hash und bleibt sicher. MD5 ist schneller, aber nur fur nicht-sicherheitsrelevante Prufsummen geeignet.

Ist MD5 noch sicher?

MD5 ist fur kryptografische Zwecke NICHT sicher. Es ist akzeptabel fur nicht-sicherheitsrelevante Prufsummen, Cache-Schlussel und Deduplizierung.

Kann man einen Hash umkehren?

Nein, Hash-Funktionen sind Einwegfunktionen. Schwache Passworter konnen jedoch durch Brute-Force oder Rainbow-Tables geknackt werden. Verwenden Sie bcrypt oder Argon2 fur Passworter.

Hash-Funktionen sind ein grundlegender Pfeiler der modernen Informatik und Cybersicherheit. Verwenden Sie SHA-256 fur Sicherheit, bcrypt/Argon2 fur Passworter und HMAC fur Nachrichtenauthentifizierung.

Generieren Sie MD5-, SHA-1-, SHA-256- und SHA-512-Hashes sofort mit unserem kostenlosen Tool.

War das hilfreich?

Stay Updated

Get weekly dev tips and new tool announcements.

No spam. Unsubscribe anytime.

Partner Picks

Sponsor this article

Place your product next to this developer topic with tracked clicks.

Ask about article sponsorship

This site uses cookies for analytics and to display ads. By continuing to browse, you agree. Privacy Policy