Golang crypto:加密文件不以 IV 为前缀
Golang crypto: encrypted file not prefixed with IV
我在 cipher.NewOFB 中使用 IV,但我的加密文件从未使用它作为前缀。我遵循了 https://golang.org/pkg/crypto/cipher/ 上的 golang 示例,但似乎无法弄清楚为什么不考虑前缀。
有人知道问题出在哪里吗?
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
}
自己添加 IV 前缀或预先共享 IV。如果您为它添加前缀,您将删除它并在解密时应用它。
如何共享 IV 不是加密标准的一部分,它是开发人员的选择。给 IV 加上前缀很常见,但不是必需的或唯一的方法,但这是一个不错的选择。
我在 cipher.NewOFB 中使用 IV,但我的加密文件从未使用它作为前缀。我遵循了 https://golang.org/pkg/crypto/cipher/ 上的 golang 示例,但似乎无法弄清楚为什么不考虑前缀。
有人知道问题出在哪里吗?
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
}
自己添加 IV 前缀或预先共享 IV。如果您为它添加前缀,您将删除它并在解密时应用它。
如何共享 IV 不是加密标准的一部分,它是开发人员的选择。给 IV 加上前缀很常见,但不是必需的或唯一的方法,但这是一个不错的选择。