- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我目前正在尝试使用 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 overcreateCipher
?
是的,如果仅仅因为作者已经警告过你并且对你的代码的任何审查都必须重新考虑 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/
我刚刚移至 Node 12.13,并且 crypto.createDecipher 和 crypto.createCipher 遇到一些问题 首先,当我使用这两个函数时,我收到了弃用警告。 const
我目前正在尝试使用 NodeJS 加密静态数据,我在 Node API 文档中读到 createCipher 不是 recommended . The implementation of crypto
我正在使用以下函数来加密/解密 Node.js 中的字符串: var crypto = require('crypto'); var algorithm = 'aes-256-ctr'; functi
我有一些遗留数据,在 Node 中加密,我需要在 Ruby 中解密。 问题是,数据是使用现已弃用的方法加密的,createCipher .此方法使用密码来执行加密。它已被 createCipheriv
我继承了一个数据库,其中一些字段由旧代码加密。 代码使用了(现已弃用)crypto.createCipher Node.js 提供的函数。该函数期望传递明文密码,而不是 key 和初始化向量。文档表明
我有一个接收应用程序,它需要来自 PHP 生成器的字符串,如下所示: 05c3febb9970204a ?> 更换接收器的成本很高。 我正在使用 node.js 构建另一个生成器,但我无法让我的 J
我是一名优秀的程序员,十分优秀!