我在 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}
1 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
自己添加 IV 前缀或预先共享 IV。如果您为其添加前缀,您将删除它并将其应用于解密。
如何共享 IV 不是加密标准的一部分,它是开发人员的选择。前缀 IV 很常见,但不是必需的,也不是唯一的方法,但它是一个不错的选择。
- 1 回答
- 0 关注
- 169 浏览
添加回答
举报
0/150
提交
取消