静脉注射是如何工作的,最好的储存方式是什么?

我想加密和解密字符串。我为此使用了 Nodejs 加密。我读过在加密和解密时强烈建议使用 IV。我想将加密数据存储在 MySQL 数据库中,并在需要时对其进行解密。我知道解密过程也需要 IV。但究竟什么是 IV,我应该如何存储它?我读到一些关于 IV 不能保密的内容。这是否意味着我可以将它存储在它所属的加密数据旁边?

回答

强烈建议使用 IV

不,这是必需的,否则在大多数情况下您将无法获得完全安全的密文。至少,不为相同的密钥和明文消息提供 IV 将导致相同的密文,这会将信息泄露给对手。换句话说:加密是确定性的,这不是您想要从密码中获得的属性。对于 CTR 和 GCM 模式,您可能会泄漏所有明文消息...

但究竟什么是 IV ... ?

IV 仅由二进制位组成。它的大小和内容取决于操作模式(CBC/CTR/GCM)。通常,它需要是随机数或随机数。

CBC 模式需要 16 字节的随机 IV;通常使用密码安全的随机数生成器。

CTR 模式通常在 16 字节的 IV 内指定随机数和初始计数器值。因此,您已经需要将随机数放在左侧字节(最低索引)中。这个随机数可能是随机的,但它应该足够大(例如 12 个字节)以避免生日问题。

GCM 模式只需要 12 个字节的随机数。

我应该如何存储它

无论如何,您可以存储字节,只要它们可以在解密期间检索或重新生成。如果您需要文本,您可能需要使用 base 64 或十六进制对其进行编码(当然,这也适用于密文)。

我读到一些关于 IV 不能保密的内容。

没错。

这是否意味着我可以将它存储在它所属的加密数据旁边?

正确,通常 IV 只是作为密文的前缀;如果您知道分组密码和操作模式,那么大小毕竟是预先确定的。


以上是静脉注射是如何工作的,最好的储存方式是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>