问题标签 [pbkdf2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - 我可以通过加盐现有的 MD5 哈希并使用 Scrypt 或 PBKDF2 HMACSHA256 对结果进行哈希处理来提高 MD5 哈希密码的安全性吗?
我有一个使用 MD5 加盐和散列的旧密码数据库。我想更新系统以使数据更安全。
第一个选项是在用户登录并在一段时间后停用旧用户时将用户转换到新的哈希方案(Salt + Scrypt 或 PBKDF2 HMACSHA256),因此他们必须使用密码恢复功能,该功能会自动更新他们的哈希值。
另一个可以让我立即升级每个人的选项是采用现有的 MD5 哈希值,为每个哈希值添加一个新的随机盐值,然后使用新的哈希方案(Salt + Scrypt 或 PBKDF2 HMACSHA256)对结果进行哈希处理并存储该值到数据库并删除旧值。
然后当用户登录时,我必须先应用旧方法,然后再应用新方法。我更喜欢第二个选项,因为它允许我迟早从数据库中删除所有旧的不安全哈希。
对现有哈希进行加盐和重新哈希是否安全?MD5 是否如此损坏以至于我可以运行一个脚本来对密码进行去散列并使用新方案对其进行重新散列?
或者也许最好的解决方案是结合这两种选择?这样我就不必在数据库中保留现有的 MD5 哈希值,并且可以在一段时间内将用户迁移到新系统?
pycrypto - 向 pycrypto KDF 添加盐 - 有用吗?
我注意到一些消息来源表明,当使用像PBKDF2这样的 KDF 时,一些人提倡在执行时注入盐 - 如下所示:
与“普通”用法相比
使用该PyCrypto.Protocol.KDF
PBKDF2
功能(上面链接)时,如果没有两个密码具有相同的盐(但盐将与密码一起存储),额外的盐参数是否会增加任何好处?
据推测,风险在于有一个预言机,因此相同的密码将按原样显示、编码。是这种情况还是应该注意其他问题?
如果这是我所期望的唯一问题,那么在允许短路的算法中没有错误的情况下,简单使用的盐迫使人们在整个迭代次数内重新检查每个密码。是这样吗?
php - 存储安全密码 MD5、BCRYPT、PBKDF2(PDO、MySQL、PHP)
使用 PHP 将密码存储到 MySQL 的最佳和最安全的方法是什么。
我的观点来自我在网上阅读的内容。
MD5 - 过时且容易被破坏。 (不需要示例)
BCRYPT - 使用 60 个字符进行安全保护,无需重复使用盐。 (找不到工作示例。
PBKDF2 - 将密码存储到数据库中的最安全方式。(下面的例子)
javascript - Javascript 中的 PBKDF2 安全性
在 PBKDF2 中,每个密码的盐值应该是唯一的,因此使用相同密码的两个用户将获得两个不同的哈希值。
我对 salt 的想法是用户名和密码的 SHA1 哈希,因此每个用户都是唯一的。
实际上,我必须在 JavaScript 环境中生成 PBKDF2 哈希。由于 JavaScript 源代码是纯文本,因此显示盐是如何生成的是否可以保存?
node.js - 使用 pbkdf2 的 SALT 和 HASH
我正在使用以下方法从 nodejs 中的加密库创建一个加盐和散列的密码:
对于 randomBytes 调用(创建 SALT)我应该使用什么大小?我听说过 128 位的盐,可能高达 256 位。看起来这个函数使用字节大小,所以我可以假设 32(256 位)的大小就足够了吗?
对于 pbkdf2 调用,什么是合适的迭代次数以及密钥 (keylen) 的合适长度是多少?
此外,对于存储,我已经看到将盐、长度、迭代和 derviedkey 存储在同一列中的示例。我正在使用一个将 4 分开的示例::
,即:
这样做,然后我可以分离::
以获取 4 个值,因此我可以根据提供的密码生成派生密钥以查看它是否匹配。这是存储它的正确方法吗?或者我应该在结合这些价值观时更具“欺骗性”吗?
javascript - Django pbkdf2_sha256 JS 实现
我有一个来自 django 的数据库,我想从 Node.js 使用它。我有一个任务:验证用户。从数据库已知:算法 pbkdf2_sha256、盐、10000 次迭代和 base64 编码的哈希。我必须在 JS 中执行哪些步骤才能将某些密码编码为给定的 base64-hash?
UPD:在这里找到解决方案:python (django) hashlib vs Nodejs crypto 但是 Django 生成的哈希和 JS 生成的哈希不匹配...
Django 生成下一个:
JS:
密码:Simple123
c# - 带有 Rfc2898DeriveBytes 的 PBKDF2 为相同的输入产生不同的输出?
我的印象是,基于密码的密钥派生函数的重点是每次都以相同的方式从密码生成加密安全的密钥流,因此可以依赖它们从密码生成加密密钥。
根据我在网上阅读的内容,包括stack overflow,这似乎是预期用途。
因此,当我为我认为相同的输入生成不同的输出时,我认为我用错了。为了测试这一点,我编写了一个测试用例Rfc2898DeriveBytes
,按照文档建议的方式使用它。
这个测试用例失败了,我不知道为什么。我是误用了这个功能,还是我误解了它的用途?
编辑:好的,上面的测试方法是一个有缺陷的测试,因为我没有使用断言的集合形式。我认为 AreEqual 会在参数上调用 .Equals,而对于将被实现以比较内容的集合。
我遇到的问题是我认为 Rfc2898DeriveBytes 的相同参数会为相同的输入产生不同的输出,但输入略有不同:
我生成了一个 16 字节的 salt 并将其存储在数据库中,但是由于字段长度的原因,当检索 salt 进行解密时,前 16 个字节是相同的(所以我认为它使用了相同的信息)但是这些被遵循另外 48 个字节的 0,因此输入不同。
php - 我应该使用什么数据类型和大小在 mysql 表中存储 PBKF2(sha256) 哈希和 base64 盐?
如本文所述,我决定使用 PBKF2(基于密码的密钥派生函数)来保护我的用户密码
我的问题是我找不到应该使用哪种MySQL 数据类型来存储这些生成的哈希和 base64 盐以及它们应该是什么长度。
谢谢你
python - Registration Form to Gen Hashed Password with PBKDF2PasswordHasher
I'm trying to get my userPass
field to be hashed with PBKDF2PasswordHasher upon successful submission and when submitted to check if the userNm
field, already exists or not.
I have a modelform:
a hasher.py file to define a custom definition for PBKDF2PasswordHasher:
a view
settings.py has:
It currently outputs the userNm on the next page, and saves both userNm
and userPass
to database, but the userPass
is cleartext.
What am I doing wrong here? can someone help?