Golang-Datei-Verschlüsselung mit crypto/aes-lib
Ich versuche, eine Datei verschlüsseln mit dem Gehen crypto/aes-Paket. Ich habe so weit:
func encrypt(source string, localdir string) error {
src := filepath.Join("/home/bacula/cloud-backup/"+localdir, source)
dst := filepath.Join(src + ".aes")
fmt.Println(src)
fmt.Println(dst)
key := []byte("example key 1234")
iv := []byte(key)[:aes.BlockSize]
aesBlockEncrypter, err := aes.NewCipher([]byte(key))
if err != nil {
return err
}
aesEncrypter := cipher.NewCFBEncrypter(aesBlockEncrypter, iv)
aesEncrypter.XORKeyStream([]byte(dst), []byte(src))
return nil
}
Meine erste Frage ist, wie kann ich verbessern, wie ich bin, die Generierung des IV? Und zweitens, es gibt keine Ausgabe-Datei, so wie streame ich die Datei über XORKeyStream?
- Ich empfehle, mit golang.org/x/crypto/nacl/secretbox wenn Sie brauchen, um Dateien zu verschlüsseln, wie es auch korrekt authentifiziert den verschlüsselten Daten.
- Nicht Rollen Sie Ihre eigene Verschlüsselung. Nur mit einem sicheren primitive (AES) ist nicht ausreichend/ist sicher, wenn Sie nicht verwenden Sie es richtig (IV, Schlüssel, block-Modus, etc, etc). E. g. nicht immer eine passphrase verwenden raw-wie Sie es tun (es gibt ein paar wichtige Funktionen Ableitung wie ist
golang.org/x/crypto/pbkdf2
für dass); verwenden Sie eine kryptografisch sichere und völlig zufällig, IV, etc. Es sei denn, du bist ein Kryptographie-Experte sollten Sie über eine vollständige Implementierung von einem Experten geschrieben, der kümmert sich um sämtliche details, so dass Sie nicht bekommen es falsch. - Auch, crypto.stackexchange.com kann besser für crypto-Fragen wie "wie erstelle ich eine IV -" oder "wie kann ich das verwenden einer passphrase als Schlüssel" (die weitgehend Programmiersprachen-unabhängige Fragen).
- Ich habe Bedenken secretbox aber es gibt sehr wenig Dokumentation. Ich kann nicht finden, Beispiele gibt. Ich wünschte, es war besser, docs für es
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein Beispiel in der
crypto/cipher
Paket Dokumentation.Habe ich gezwickt Beispiel neue Beispiel für Sie: