Kryptographie in Go: Verschlüsselung und Hashing für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Kryptographie in Go (Golang): Verschlüsselung und Hashing

Go (Golang) ist eine moderne, kompilierte Sprache, die für ihre Leistung und integrierte Unterstützung kryptografischer Algorithmen bekannt ist. Die Standardbibliothek crypto bietet alles, was für den Datenschutz benötigt wird: vom einfachen Hashing bis zur komplexen asymmetrischen Verschlüsselung. In diesem Artikel werden wir die wichtigsten Werkzeuge erläutern und praktische Codebeispiele zeigen.



Wozu braucht man Kryptographie in Go?

Kryptographie in Go wird verwendet für:

  • Passwortspeicherung (Hashing);
  • Datenübertragung über Netzwerke (TLS/SSL);
  • Digitale Signaturen und Authentifizierung;
  • Verschlüsselung vertraulicher Dateien.

Go gewährleistet Sicherheit durch eine durchdachte API – es ist schwierig, versehentlich einen veralteten oder unsicheren Algorithmus zu verwenden.



Hashing in Go

Hashing ist die einseitige Umwandlung von Daten in eine Zeichenkette fester Länge. In Go sind dafür die Pakete crypto/md5, crypto/sha1, crypto/sha256 und crypto/sha512 zuständig.



Beispiel: SHA-256 Hash

package main

import ( "crypto/sha256" "fmt")

func main() { data := []byte("Geheime Daten") hash := sha256.Sum256(data) fmt.Printf("SHA256: %x", hash)}

Ausgabe: SHA256: 3c3b... (64 Zeichen)



Hashing mit Salt für Passwörter

Für die sichere Speicherung von Passwörtern verwenden Sie crypto/rand zur Generierung eines Salts und crypto/sha256:

package main

import ( "crypto/rand" "crypto/sha256" "fmt")

func main() { password := []byte("MeinPasswort123") salt := make([]byte, 16) rand.Read(salt) salted := append(salt, password...) hash := sha256.Sum256(salted) fmt.Printf("Salt: %x", salt) fmt.Printf("Hash: %x", hash)}

In der Praxis sollte für Passwörter besser bcrypt (Paket golang.org/x/crypto/bcrypt) verwendet werden, aber SHA-256 mit Salt ist eine gute Option zum Lernen.



Symmetrische Verschlüsselung: AES

AES (Advanced Encryption Standard) ist der beliebteste symmetrische Algorithmus. In Go ist er im Paket crypto/aes in Verbindung mit Verschlüsselungsmodi (crypto/cipher) implementiert.



Beispiel: AES-GCM Verschlüsselung

package main

import ( "crypto/aes" "crypto/cipher" "crypto/rand" "fmt")

func main() { key := []byte("0123456789abcdef0123456789abcdef") // 32 Bytes für AES-256 plaintext := []byte("Vertrauliche Nachricht") block, _ := aes.NewCipher(key) aead, _ := cipher.NewGCM(block) nonce := make([]byte, aead.NonceSize()) rand.Read(nonce) ciphertext := aead.Seal(nil, nonce, plaintext, nil) fmt.Printf("Verschlüsselt: %x", ciphertext) // Entschlüsselung decrypted, _ := aead.Open(nil, nonce, ciphertext, nil) fmt.Printf("Entschlüsselt: %s", decrypted)}

GCM (Galois/Counter Mode) bietet Vertraulichkeit und Authentifizierung – die beste Wahl für die meisten Aufgaben.



Asymmetrische Verschlüsselung: RSA

RSA verwendet ein Schlüsselpaar (öffentlich und privat). In Go ist es in crypto/rsa und crypto/rand implementiert.



Schlüsselgenerierung und Verschlüsselung

package main

import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt")

func main() { privateKey, _ := rsa.GenerateKey(rand.Reader, 2048) publicKey := &privateKey.PublicKey message := []byte("Geheimnis für RSA") label := []byte("") // Verschlüsselung mit öffentlichem Schlüssel ciphertext, _ := rsa.EncryptOAEP(sha256.New(), rand.Reader, publicKey, message, label) fmt.Printf("Mit RSA verschlüsselt: %x", ciphertext) // Entschlüsselung mit privatem Schlüssel plaintext, _ := rsa.DecryptOAEP(sha

Empfehlungen