gpt4 book ai didi

node.js - Nodejs createCipher 与 createCipheriv

转载 作者:IT老高 更新时间:2023-10-28 23:08:53 30 4
gpt4 key购买 nike

我目前正在尝试使用 NodeJS 加密静态数据,我在 Node API 文档中读到 createCipher 不是 recommended .

The implementation of crypto.createCipher() derives keys using the OpenSSL function EVP_BytesToKey with the digest algorithm set to MD5, one iteration, and no salt. The lack of salt allows dictionary attacks as the same password always creates the same key. The low iteration count and non-cryptographically secure hash algorithm allow passwords to be tested very rapidly.

In line with OpenSSL's recommendation to use pbkdf2 instead of EVP_BytesToKey it is recommended that developers derive a key and IV on their own using crypto.pbkdf2() and to use crypto.createCipheriv() to create the Cipher object.

createCipher 仍然是加密静态数据的可行且安全的方法吗?这种方法是否应该被视为已弃用?消息灵通的攻击者是否可以解密数据?

是否应该始终首选使用 createCipheriv 的解决方案而不是 createCipher

任何其他细节或建议表示赞赏。

最佳答案

Is createCipher still a viable and secure way to encrypt data at rest?

虽然当然不建议使用已弃用的 API 调用,但可以使用 createCipher 创建安全系统.为此,给定的“密码”必须足够强大以承受离线攻击,并且可能是并行攻击。为此,给定的密码必须有足够的熵(必须足够随机)才能被猜到。例如,您可以使用密码管理器创建约 80 位或更高的密码并使用这些密码。

Should a solution using createCipheriv always be preferred over createCipher?

是的,如果仅仅因为作者已经警告过你并且对你的代码的任何审查都必须重新考虑 createCipher仍然可行。如果该方法曾经从 CryptoJS 中删除(不太可能,但毕竟已被弃用),那么您的代码将不再运行。

不过,使用 createCipheriv安全性低于createCipher如果您直接使用密码作为 key 。您仍应使用正确的基于密码的 key 派生函数(例如 PBKDF2)来派生输出 key Material - 如更新的文档中所述。

Any other details or recommendations appreciated.

在大多数情况下,您希望使用更高端的加密/解密方法,例如加密消息语法(CMS,在 PKCS#7 中指定)、PGP 或类似的高端协议(protocol)/容器格式。

如果您确实需要直接使用密码,您应该尝试看看是否可以选择像 GCM 提供的身份验证加密

关于node.js - Nodejs createCipher 与 createCipheriv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44031377/

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