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 Auch in der Bibliothek
Node.js-Überwachung: Tools und Bibliotheken für Observability
Clap — leistungsstarkes CLI-Framework für Rust
Rate Limiting in JavaScript (Node.js): Vollständiger Leitfaden zur Bibliothek express-rate-limit
Elasticsearch-Client für Swift (iOS/macOS): Integration und Beispiele