Golang加密:加密文件,不带IV前缀

时间:2016-08-31 21:34:05

标签: go cryptography aes

我在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 个答案:

答案 0 :(得分:2)

自己添加IV前缀或预先共享IV。如果您使用前缀,则将其删除并在解密时应用它。

如何共享IV不是加密标准的一部分,它是开发人员的选择。前缀IV是常见的但不是必需的或唯一的方法,但它是一个不错的选择。