初始化向量应该隐藏吗?
Is Initialization Vector should be hidden?
我正在创建一些用于保存文件的加密逻辑,并打算应用 AES 加密。
其实我已经在Online Encrypter实现了AES加密,并不是自己创建加密逻辑,所以我无法意识到IV的存在。
好不容易找到函数RijndaelManaged.GenerateIV()
.
我认为自动生成的 IV 应该存储在目标文件的某个地方,才能成功解密文件,但它应该像加密密钥一样隐藏。
可以只将 'plain' IV 附加到文件后面吗?如果不是,我如何才能更正确地存储和使用 IV?
对于每个使用密钥加密的明文,initialization vector
(IV) 应该是 unique 和 random。但是,它不需要保密。您可以将 IV 附加到密文并以明文形式传输。
IV的原因是为了确保第一个块的加密是唯一的。例如,如果您使用 AES/CBC
使用相同的密钥加密相同的消息并且没有提供 IV,则输出将是相同的。引入 IV 意味着密文的第一个块(16 字节)将是唯一的,因此,整个消息密文将是不同的(由于 CBC 操作模式)。有关详细信息,请参阅维基百科关于 Block Cipher Modes of Operation 的文章。
我正在创建一些用于保存文件的加密逻辑,并打算应用 AES 加密。
其实我已经在Online Encrypter实现了AES加密,并不是自己创建加密逻辑,所以我无法意识到IV的存在。
好不容易找到函数RijndaelManaged.GenerateIV()
.
我认为自动生成的 IV 应该存储在目标文件的某个地方,才能成功解密文件,但它应该像加密密钥一样隐藏。
可以只将 'plain' IV 附加到文件后面吗?如果不是,我如何才能更正确地存储和使用 IV?
对于每个使用密钥加密的明文,initialization vector
(IV) 应该是 unique 和 random。但是,它不需要保密。您可以将 IV 附加到密文并以明文形式传输。
IV的原因是为了确保第一个块的加密是唯一的。例如,如果您使用 AES/CBC
使用相同的密钥加密相同的消息并且没有提供 IV,则输出将是相同的。引入 IV 意味着密文的第一个块(16 字节)将是唯一的,因此,整个消息密文将是不同的(由于 CBC 操作模式)。有关详细信息,请参阅维基百科关于 Block Cipher Modes of Operation 的文章。