问题标签 [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.

0 投票
2 回答
2297 浏览

cryptography - 关于PBKDF2的一些问题

我正在使用 PBKDF2 从我的应用程序中的密码字符串派生密钥,对此我有几个问题。

首先是我在网上看到很多使用 HMAC-SHA256 等哈希的 PBKDF2。它使用 HMAC-SHA256 而不仅仅是 HMAC 是什么意思?我认为 HMAC 使用密钥加密数据。

其次,我了解到 BlackBerry 存在漏洞,因为它的 PBKDF2 函数只使用了一次迭代(而不是像 1000 次)。一次迭代是否与仅对密码进行哈希处理相同(例如使用 SHA256)。

谢谢

0 投票
3 回答
2347 浏览

c# - Rfc2898DeriveBytes + PBKDF2 + SecureString 是否可以使用安全字符串而不是字符串?

我有一个函数GetPassword,它返回一个SecureString类型。

当我将此安全字符串传递Rfc2898DeriveBytes给生成密钥时,Visual Studio 显示错误。我有限的知识告诉我,这是因为Rfc2898DeriveBytes只接受字符串而不接受安全字符串。有解决方法吗?

0 投票
1 回答
22864 浏览

openssl - 如何使用 PKCS5_PBKDF2_HMAC_SHA1()

我正在尝试使用PKCS5_PBKDF2_HMAC_SHA1(),下面是我的示例程序。我想确定我的结果PKCS5_PBKDF2_HMAC_SHA1()是否正确,所以我用网站http://anandam.name/pbkdf2/验证了相同的结果,我看到了不同的结果。我是否正确使用了 API?

我怀疑我是否正确传递了盐值。

我已经在程序之后粘贴了我的结果和网站结果。

请帮助我理解这一点。

样本输出:

网站结果:

0 投票
1 回答
1638 浏览

hex - 字节数组的十六进制表示

问这个问题我觉得很愚蠢,但由于我不知道答案,我还是要继续。

我正在尝试一些身份验证代码并想知道为什么我从 Rfc2898DeriveBytes 获得的字节数组需要转换为 HEX 并再次转换回字节数组才能正确初始化我的 HMACSHA1 对象。我觉得我在做一些愚蠢的事情,或者只是遗漏了一些明显的东西。

我的客户端代码是一个基于crypto-js的 javascript 函数;

我的服务器端代码如下;

我从网上获取的 ByteArrayToString 方法是;

所以我可以看到我从对rfc2898.GetBytes(32). 我使用 ByteArrayToString 方法将其转换为 HEX,以确认它与我在 Javascript 变量 key256bit 中看到的匹配。现在我的测试变量是一个长度为 64 的字符串,当我使用 encoding.GetBytes(test) 将它传递给 HMACSHA1 的构造函数时,它是一个长度为 64 的字节数组。

crypto-js 上的文档有点欠缺,但我认为以 32 的参数调用 Crypto.PBKDF2 并创建了一个 32 字节长(或 256 位)的密钥。

任何澄清都非常感谢。

0 投票
1 回答
2574 浏览

c# - RNGCryptoServiceProvider 不会为相同的 PWD、Salt、Iteration 组合生成相同的哈希

Oki 所以我想通过在 .Net 中附加随机盐来散列我的密码。我为此目的使用的内置类是RNGCryptoServiceProvider - 生成随机盐和Rfc2898DeriveBytes - 散列实际密码。

但是当我为密码字符串、SaltBytes 和迭代计数的相同组合调用 Rfc2898DeriveBytes 的 GetBytes() 函数时,结果是不同的。我正在粘贴我的代码以供参考

在我的测试课中,我有这个功能

测试失败。
但是,如果在上面的类 PBKDF2Implementation 中,如果我将 System.Text.Encoding.ASCII.GetString 行替换为 System.Text.Encoding.Unicode.GetString 并将 System.Text.Encoding.ASCII.GetBytes 替换为 System.Text.Encoding.Unicode。获取字节

测试通过。知道为什么会这样吗?我想让它与 ASCII 编码一起工作的原因是因为存储此哈希值的同一数据库也将被 PHP 应用程序使用,并且 PHP 的 PBKDF2 实现产生的哈希值仅在盐编码为时才与 Rfc2898DeriveBytes 的哈希值匹配ASCII。

这是相同 http://www.php.net/manual/en/function.hash-hmac.php#101540的 PHP 实现

0 投票
1 回答
378 浏览

asp.net - 是否使用 Rfc2898DeriveBytes 提供相同的盐和密码派生相同的密钥

我阅读了有关 .NET 中加密的本教程

它使用 Rfc2898DeriveBytes 创建一个随机密钥,供对称算法使用。但它不保存密钥。稍后在解密方法中,它提供相同的密码和盐并解密文本。

这是否意味着向 Rfc2898DeriveBytes 提供相同的盐和密码可以派生相同的密钥?无需保存密钥,只需保存盐和密码?

0 投票
1 回答
5333 浏览

php - PBKDF2 推荐的密钥大小?

我的功能如下:

1000 是通过次数,128 是密钥大小。该函数返回一个二进制密钥,我使用 base64 将其存储在数据库中。

我的问题是:使用 sha512 的 pbkdf2 的推荐密钥大小和盐大小是多少?

密钥大小为 32 是否与密钥大小为 128 一样安全?

0 投票
1 回答
1561 浏览

node.js - PBKDF2 的所有实现是否应该从相同的输入生成相同的密钥?

我正在将我的 node.js 应用程序的哈希算法从基于 JS 的CryptoJS实现切换到节点自己的加密实现。

这是我的实现:

我注意到的一件事是nodeCryptoKey最终成为32字符长并且 cryptoJSKey 是192. 如果我将keySizefor only 节点的crypto版本增加到144( keySize * 6),则密钥最终192也会变成字符长 - 尽管它仍然不同。

我做错了什么还是实现方式彼此不同?

0 投票
5 回答
18809 浏览

security - 暴力破解 PBKDF2 的速度有多快?

在linkedin密码散列泄漏之后,我一直在查看我们的密码散列。我们使用 Django 1.4,它使用 PBKDF2,它很棒,比之前的 SHA1 更上一层楼。

但是我很好奇一个人可以很容易地暴力破解它。我正在查看我们的密码复杂性规则,并且想知道执行(例如)8 个长度的小写 ascii 字母需要多快。

这份破解 LinkedIn 密码哈希的指南,有人在 GPU 上每秒执行 4.3 亿次 sha1 哈希。http://erratasec.blogspot.ie/2012/06/linkedin-vs-password-cracking.html PBKDF2 你会得到什么样的速度?

有没有人有任何粗略的/粗略的/粗略的数字来说明一个人可以多快地暴力破解 PBKDF2?

0 投票
2 回答
4064 浏览

php - 使用 PBKDF2 在 MySQL 数据库中存储密码和盐

我一直在尝试使用 pbkdf2 使我的用户密码真正安全。

密码哈希可以很好地进入数据库,但盐不是。

似乎盐包含 mysql 列不喜欢的外来字符。

我的“用户”表中的所有列都是 UTF8_unicode_ci。

这是我的密码哈希:

和 pbkdf2:


另外,我刚刚注意到它为相同的密码存储了完全不同的哈希值。

我这样做对吗?