问题标签 [salt]

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 投票
1 回答
8894 浏览

php - 使用 PHP 的 crypt 的河豚盐的正确格式是什么?

我已经阅读了PHP Manual Entry forcrypt()中提供的信息,但我发现自己仍然不确定触发 Blowfish 算法的盐的格式。

根据手动输入,我应该使用 '$2$' 或 '$2a$' 作为 16 个字符的字符串的开头。但是,在后面给出的示例中,他们使用了更长的字符串:' $2a$07$usesomesillystringforsalt$',这向我表明,我提供的任何字符串都将被切片和切块以适合模型。

我遇到的问题实际上是触发 Blowfish 算法与STD_DES. 例子:

该哈希显然不是漩涡,实际上STD_DES只有盐的前两个字符用于盐。但是,在 PHP 手册的示例中,它们的 salt 以 ' $2a$07$' 开头,所以如果我将这三个字符添加到相同的代码中,我会得到以下信息:

我注意到我可以在此处显示为 ' 07$' 的字符中提供一些差异,例如04$15$两者都可以工作,但01$通过03$不工作(生成一个空白字符串),以及诸如和之类的值99$导致85$STD_DES再次恢复.

问题:

' ' 字符串后面的这三个字符的意义是什么$2a$,正如我被手册所引导的那样,指示 crypt 函数使用河豚方法。

根据手册,' $2a$'应该足以指导crypt()使用河豚方法;那么,以下三个字符的意义是什么?那么,如果这三个字符如此重要,那么盐的正确格式是什么?

0 投票
4 回答
14199 浏览

php - 为什么 crypt/blowfish 使用两种不同的盐生成相同的哈希?

这个问题与 PHP 的crypt(). 对于这个问题,不计算盐的前 7 个字符,因此盐 ' $2a$07$a' 的长度为 1,因为它只有盐的 1 个字符和元数据的七个字符。

当使用长度超过 22 个字符的 salt 字符串时,生成的哈希值没有变化(即截断),而当使用少于 21 个字符的字符串时,salt 将自动被填充($显然是用 ' ' 字符);这相当简单。但是,如果给定一个盐 20 个字符和一个盐 21 个字符,其中除了 21 长度盐的最后一个字符之外,两者相同,则两个散列字符串将相同。一个长度为 22 个字符的盐,除了最后一个字符外,它与 21 个长度的盐相同,哈希将再次不同。

代码示例:

将产生:

为什么是这样?

编辑:

一些用户注意到整个字符串存在差异,这是真的。在salt_20, 偏移量 (28, 4) 是da$., 而在salt_21, 偏移量 (28, 4) 是da2.; 但是,重要的是要注意生成的字符串包括哈希、盐以及生成盐的指令(即$2a$07$);实际上,发生差异的部分仍然是盐。实际的哈希值不变UxGYN739wLkV5PGoR1XA4EvNVPjwylG

因此,这实际上不是产生的哈希的差异,而是用于存储哈希的盐的差异,这正是当前的问题:两个盐生成相同的哈希。

Rembmer:输出将采用以下格式:

其中 ## 是 log-base-2 确定算法运行的迭代次数

编辑2:

在评论中,要求我发布一些附加信息,因为用户无法重现我的输出。执行以下代码:

产生以下输出:

希望这可以帮助。

0 投票
3 回答
244 浏览

authentication - 认证阶段的盐暴露

我已经实现了如下所示的多级身份验证。

方括号([ 和 ])表示哈希

客户端具有用于身份验证的密钥秘密。服务器有一个数据库表,其中的行包含一个keysalt和一个[secret + salt]

然后服务器根据自己的信息检查收到的散列。

我担心的是,这使攻击者能够从服务器获取盐,然后生成彩虹表来破解该帐户。您对此有何看法?

0 投票
2 回答
448 浏览

encryption - 除了防止彩虹表攻击之外,哈希盐还有其他用途吗?

我听说盐的唯一目的是防止彩虹表攻击,但它肯定比这更有价值吗?它不会也阻止基于字典的攻击吗?那么暴力破解呢,盐在那里有用吗?你能解释一下为什么吗?

其次,假设我有一个算法,它采用微时间、128 个字符的盐和 10 亿到 100 亿之间的随机数,并将它们散列在一起。这会提供高水平的安全性吗?因为即使攻击者知道其中一个细节,在我看来,计算其余部分在计算上仍然是不可行的。对吗?

谢谢,

编辑:澄清一下,攻击者无权访问散列算法,因此他们无法向系统发送任何垃圾信息。他们所拥有的只是哈希,他们必须弄清楚它是如何编译的。当然,即使他们知道哈希是如何生成的,尝试用长盐暴力破解所有组合也会使其不切实际吗?

此外,哈希不是用户的密码或用户名,它只是用于身份验证的一组随机字符。所以不需要存储盐和随机数,只需存储生成的哈希即可。在这种情况下,上面的系统(用下面的代码表示)是否是一个很好的系统,可以防止攻击者能够真实地猜测用户的哈希值可能是什么?

我知道那只是 1000-9999 而不是上面提到的数十亿。

再次感谢。

0 投票
2 回答
636 浏览

php - 盐和哈希生成问题

我只是想要你对某事的反馈。

基本上我有一个名为 $uniqueID 的值,它是 = ID + 名字的第一个字母 + 姓氏的第一个字母 + 字符串“CAN”

然后我将 $uniqueID 转换为盐值,如下所示 $salt = sha1($uniqueID);

然后,我使用 md5() 将用户的密码转换为哈希值。

然后,我使用正确的数据类型将这两个值单独存储在数据库中。

我只是想知道这是否是保护两种用户验证的安全方法?密码验证将由用户完成,$uniqueID 将通过脚本完成。

我不会提供提醒您密码的服务,您必须创建一个全新的密码。

我还为会议实施了一些安全措施。

0 投票
0 回答
115 浏览

callback - 如果使用 HTTP 身份验证方案,如何检索盐?

是否可以将加盐密码与标准 HTTP 身份验证方案(FORM 或 DIGEST)一起使用?

我正在使用 GlassFish,当我请求受保护的页面时,服务器会直接将表单或带有 nonce 的答案发回。我看不到任何明显的方法可以连接到服务器机制以在 302 响应中插入盐(我认为这可能是一个好主意)。因此,我返回的密码可以在没有盐的情况下进行散列。

是这样吗 ?
谢谢你。

0 投票
1 回答
753 浏览

asp.net-membership - 将 ASP.NET 会员系统转换为安全密码存储

我有一个潜在客户,他们在 ASP.NET 3.5 中设置了他们的网站和会员系统。当他们的开发人员设置系统时,他似乎关闭了密码存储的安全/散列方面,一切都以明文形式存储。

是否有在不更改数据库中所有密码的情况下重新安装/更改 ASP.NET 成员的安全密码存储的过程?客户担心如果他们都必须进行大规模的密码更改,他们会失去客户。

我总是默认安装安全性,因此我不知道切换的效果。有没有办法将整个系统转换为安全的密码系统,而不会对用户产生重大影响?

0 投票
8 回答
37518 浏览

php - 在 PHP 中生成盐

在不依赖于典型 PHP 安装中很少包含的库的情况下,在 PHP 中生成加密安全的 32 字节盐的最佳方法是什么?

经过一番谷歌搜索后,我发现这mt_rand被认为不够安全,但我还没有找到替代建议。一篇文章建议阅读/dev/random但不仅这在 Windows 上不起作用;它也慢。

我希望在安全性和速度之间取得合理的平衡(即,生成 512 字节不应该像/dev/random通常那样需要 20 秒)

0 投票
4 回答
18580 浏览

asp.net - 如何手动创建 asp.net 会员提供者散列密码?

我使用网站作为前端,所有用户都通过标准 ASP.NET Membership-Provider 进行身份验证。密码以“散列”形式保存在 SQL 数据库中。

现在我想编写一个具有管理功能的桌面客户端。除其他外,应该有一种方法可以重置用户密码。我可以使用保存的会员数据访问数据库,但是如何手动创建密码盐和哈希?使用 System.Web.Membership 命名空间似乎不合适,所以我需要知道如何手动创建新密码的 salt 和 hash。

专家站出来!:)

0 投票
6 回答
2214 浏览

security - 盐、密码和安全性

我已经阅读了关于这个的许多问题,但许多答案相互矛盾,或者我不明白。

您应该始终将密码存储为哈希,而不是纯文本。但是您是否应该将盐(每个用户唯一的)存储在数据库中的散列密码+盐旁边。这对我来说似乎不是很聪明,因为有人无法访问数据库,查找名为 Admin 的帐户或其他帐户,然后从中计算出密码?