gpt4 book ai didi

Python:在 AES 中使用相同的 IV 进行加密和解密

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:59 26 4
gpt4 key购买 nike

我很难理解在 AES 中加密数据时 IV(初始化向量)的正确使用。

准确地说,我不确定在哪里存储随机生成的 IV:在我的脚本中,数据将被加密,然后保存到文件中,然后程序将终止。在下一次 session 期间,必须解密之前保存的数据。如果我对 IV 的理解是正确的,我必须使用与加密相同的 IV 进行解密(但每个加密过程都使用另一个随机 IV)。因此,我必须将 IV 存储在某个地方 - 有些人建议将其添加到加密数据之前,但如果我做对了,这在我的情况下不起作用,因为我需要 IV 为了能够解密它。

这是正确的还是我误解了什么?我想避免将加密/散列 key 和 IV(即使本身散列)保存在某些未加密的纯文本设置文件或其他内容中。

最佳答案

IV本身不是敏感数据;它只是用于扰乱第一个密文 block 的状态,并且扰乱无法从 IV 本身恢复( key 添加了“ secret ”因子)。

对于“正确的”链接模式,IV 与密文分开(加密和解密都需要初始 IV),并且必须单独存储并单独传递到加密库 API。加密后,您可以随心所欲地存储 IV - 只是不要丢失它;)。

您当然可以“前置”/“附加”到密文,这样您只需存储单个数据 block - 但您只需在解密之前将其分开,因为这是 API 所期望的.

执行 IV 的“不正确”方式(例如,如果您的加密库 API 没有 native IV 支持,但支持链接)只是在加密之前将单个随机数据 block 添加到明文中。在这种情况下,没有任何 IV 可以单独存储 - 您只需加密整个 IV + 消息二进制对 - 然后您只需在解密后删除第一个数据 block 即可。您预先添加的“随机数据”与真实 IV 具有相同的约束(不要使用相同的 key 重复使用相同的随机数据等)。

这两种方法在 API 级别上语义不同,但对实际加密的影响是相同的(不可预测地对真实有效负载的第一个 block 进行加密)。

就 IV 的使用方式而言,有很多可能的方案。请参阅此处关于区 block 链的维基百科文章,以方便的图片展示当 IV 真正单独存储时如何在各种链接模式中使用。

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

关于Python:在 AES 中使用相同的 IV 进行加密和解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38746213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com