Я использую IV в cipher.NewOFB, но мой зашифрованный файл никогда не префикс с ним. Я следовал примерам golang в https://golang.org/pkg/crypto/cipher/, но не могу понять, почему префикс не рассматривается.Golang crypto: зашифрованный файл с префиксом IV
Кто-нибудь видит, в чем проблема?
func generateRandomIV(length int) []byte {
iv := make([]byte, aes.BlockSize)
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
panic(err)
}
return iv
}
func encryptFile(filename, keystring string) error {
readFile, err := os.Open(filename)
iv := generateRandomIV(aes.BlockSize)
outFile, err := os.OpenFile(filename+".enc", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
panic(err)
}
defer readFile.Close()
defer outFile.Close()
key := []byte(keystring)
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
fmt.Println("IV:", iv)
writer := &cipher.StreamWriter{S: cipher.NewOFB(block, iv), W: outFile}
if _, err := io.Copy(writer, readFile); err != nil {
return err
}
return nil
}
Вы говорите, что я должен сам добавить байты в файл? Почему NewOFB принимает значение IV в качестве параметра, если он ничего не делает с ним? –
Да, это обычно то, что делается, когда вы используете шифрование на этом низком уровне. – zaph
Замечание: keystring - это читаемая пользователем строка, которую он не должен использовать непосредственно в качестве ключа, вместо этого ключ шифрования должен быть получен из него с помощью функции деривации, такой как PBKDF2. Это потребует еще большего количества данных в комплекте с зашифрованными данными: количество соли и итераций. – zaph