Golang 加密:加密文件不以 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

}


幕布斯6054654
浏览 170回答 1
1回答

慕勒3428872

自己添加 IV 前缀或预先共享 IV。如果您为其添加前缀,您将删除它并将其应用于解密。如何共享 IV 不是加密标准的一部分,它是开发人员的选择。前缀 IV 很常见,但不是必需的,也不是唯一的方法,但它是一个不错的选择。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go