我需要实现一个API端点,它只需要在查询参数中获取一个id
,然后将其加密值发送回来。为此,我正在研究node中的crypto
模块,我发现它有点复杂。有一件事我不明白,那就是我应该如何使用iv
?我计划将加密的key
存储在env
中,这样每个id
都可以使用相同的key
解密。那么,我是否也应该将iv
存储在env中?这是一个好的做法吗?
我看到一些api实际上为每个请求随机生成iv
,并将其与加密文本一起返回,这样用户就可以稍后将它们都发送出去进行解密。但对于我的用例,我不能将两个单独的数据发送回用户。我可以在加密文本中concat iv
,但对于某些值,加密文本本身对于我的用例来说太长了。2对于我的用例来说,什么可能是最好的方法,有什么建议吗?
1条答案
按热度按时间8ehkhllq1#
初始化向量对于防止攻击者在发生破坏 * 之后 * 使用暴力方法解密数据非常重要,即在数据库被复制/窃取的情况下。
总而言之,如果你用相同的密钥加密相同的密码两次,但是没有IV,你会得到相同的加密字符串输出。通过添加IV你会得到相同密码的不同输出,但是你必须把IV和加密数据沿着存储,参见Cipher Block Chaining。这使得解密被破坏的密码数据库变得更加困难,因为攻击者不能使用常用密码的字典来测试密钥是否匹配在关系数据库中,IV通常被称为“salt”,例如在Postgres中,您应该在存储每个密码时生成一个新的salt,如下所示:
对于您的用例,我不确定您是否需要IV,这取决于加密数据应该如何使用和/或存储。如果您决定不需要IV,您可以通过以下两种方式之一省略它:
1:通过
null
而非IV:2:(自节点10起已弃用)使用
createCipher
函数: