从其他答案中可以看出,每个加密文件具有唯一的IV至关重要,但这为什么呢?
首先-让我们回顾一下为什么每个加密文件唯一的IV很重要。(IV上的维基百科)。IV为您的加密过程的开始增加了随机性。当使用链接块加密模式(其中一个加密数据块合并了先前的加密数据块)时,我们会遇到关于第一个块的问题,这是IV的所在。
如果您没有IV,并且仅使用密钥使用链接块加密,则两个以相同文本开头的文件将产生相同的第一个块。如果输入文件在中途更改,则两个加密文件从此时开始直到加密文件的末尾将看起来不同。如果有人在一开始就注意到了相似之处,并且知道其中一个文件是从哪个开始的,那么他可以推断出另一个文件是从哪个开始的。了解明文文件的开头和对应的密文是什么,可以使该人确定密钥,然后解密整个文件。
现在添加IV-如果每个文件使用随机IV,则它们的第一个块将不同。上面的情况已被阻止。
现在,如果每个文件的IV相同怎么办?好吧,我们又遇到了问题。每个文件的第一块将加密为相同的结果。实际上,这与完全不使用IV没什么不同。
现在,让我们进入您建议的选项:
选项1.将硬编码的IV嵌入应用程序中,并将密钥保存在密钥文件中。
选项2.将硬编码的密钥嵌入应用程序中,并将IV保存在密钥文件中。
这些选项几乎相同。如果两个以相同文本开头的文件生成了以相同密文开头的加密文件,那么您将被束缚。这两种情况都会发生。(假设有一个主密钥用于加密所有文件)。
选项3.将密钥和IV保存在密钥文件中。
如果对每个密钥文件使用随机IV,那很好。没有两个密钥文件是相同的,并且每个加密文件都必须具有它的密钥文件。其他密钥文件将不起作用。
PS:一旦您选择了选项3和随机IV,请开始研究如何确定解密是否成功。从一个文件中获取一个密钥文件,然后尝试使用它来解密另一个加密文件。您可能会发现解密继续进行并产生垃圾结果。如果发生这种情况,请开始研究经过身份验证的加密。