问题标签 [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 投票
2 回答
89 浏览

authentication - 这种散列验证安全吗?

我要问的问题只是因为我很好奇。我认为我在做正确的事情,但我想确保它确实正确的事情。这是关于哈希的。

我目前正在构建的网站具有几个 Ajax ed 组件。首先,未登录的用户无法使用这些组件。其次,登录的用户只能以自己的名义提出请求。它很容易伪造,因为我发送了用户 ID。

我的验证方法如下。每个用户在数据库中都有一个包含随机信息的列,例如 8 个字符的随机字符串。除了用户发出的每个 Ajax 请求,这个随机字符串作为散列字符串发送。当服务器接收到 Ajax 请求时,此哈希与用户表匹配,以确保 ID 和哈希是有效的一对。如果是,则该请求是有效的。

“秘密”随机字符串永远不会进入用户领域,不容易被猜到,这意味着用户永远无法生成哈希。这种保护请求安全吗?有什么缺点吗?如果我用一些盐会更好吗?

顺便说一句,这种验证真的让我很感兴趣。我学习了交互设计课程。'我们'有'知识在世界,知识在头脑'的原则。散列确实使用该技术将元数据从“头部”传输到“世界”(反之亦然)。头部和世界都有比较和解密元数据的方法,因此无法模拟请求。只要世界不知道头脑知道什么。

好吧,也就是说,我想知道我的请求是否(相对)安全。提前致谢!

莱德

0 投票
1 回答
270 浏览

asp.net - 从散列密码中检查 3 个随机字母

我有一个系统,在将密码保存到数据库之前,我使用 asp.net 中的 FormsAuthentication 对密码进行加盐和哈希处理

我想要做的是,而不是每次都向客户询问他们的密码,我只想要他们密码中的 3 个随机字母。如何将其与数据库中的哈希进行比较?在这种情况下,散列仍然有效吗?据我所知,散列仅被设计为一种单向过程,不应被解密,因此检查 3 个随机字母的散列甚至是可能的吗?

0 投票
6 回答
3954 浏览

php - 电子邮件地址作为密码盐?

使用电子邮件地址作为密码的盐是一个坏主意吗?

0 投票
5 回答
17316 浏览

php - 我是否正确使用了 PHP 的 crypt() 函数?

我一直在使用 PHPcrypt()作为在我的数据库中存储和验证密码的一种方式。我将散列用于其他事情,但crypt()用于密码。文档不是那么好,似乎有很多争论。我正在使用河豚和两种盐来加密密码并将其存储在数据库中。在我存储盐和加密密码之前(如加盐哈希)但意识到它是多余的,因为盐是加密密码字符串的一部分。

我对彩虹表攻击的工作方式有点困惑crypt(),无论如何从安全的角度来看这看起来是正确的。我使用第二个盐附加到密码以增加短密码的熵,可能有点过头了,但为什么不呢?

0 投票
1 回答
1032 浏览

php - 导入 Joomla!数据库到 Prestashop,但密码的盐渍化是不同的

我的老板让我导入 Joomla!大约 250 个用户的数据库进入 Prestashop 数据库(用户)。

经过一番分析,我发现 Prestashop 和 Joomla!使用不同的密码加盐技术。

所以我的问题是:“我们注定要失败了吗?”

当源的密码盐与目标不兼容时,我该如何克服导入?

0 投票
3 回答
2968 浏览

encryption - 如果将密码存储在数据库中,使用盐如何使密码更安全?

目前我正在学习 Rails,但答案不一定是 Rails 特定的。

因此,据我了解,安全密码系统的工作方式如下:

  • 用户创建密码
  • 系统使用加密算法(例如 SHA2)加密密码。
  • 将加密密码的哈希存储在数据库中。

登录尝试时:

  • 用户尝试登录
  • 系统使用相同的加密算法创建尝试哈希
  • 系统将尝试的哈希值与数据库中的密码哈希值进行比较。
  • 如果匹配,他们就可以进入。如果不匹配,他们必须再试一次。

据我了解,这种方法会受到彩虹攻击——可能会发生以下情况。

攻击者可以编写一个脚本,基本上尝试字符、数字和符号的每个排列,使用相同的加密算法创建一个散列,并将它们与数据库中的散列进行比较。

所以解决它的方法是将哈希与独特的盐结合起来。在许多情况下,用户注册的当前日期和时间(低至毫秒)。

但是,此盐存储在数据库列“盐”中。

所以我的问题是,这将如何改变这样一个事实,即如果攻击者首先获得了对数据库的访问权限,并且为“真实”密码创建了散列,并且还具有盐的散列,那么这怎么不仅仅是受到彩虹攻击?因为,理论上他会尝试每个排列+盐哈希并将结果与​​密码哈希进行比较。只是可能需要更长的时间,但我不明白它是如何万无一失的。

原谅我的无知,我只是在学习这些东西,这对我来说从来没有多大意义。

0 投票
3 回答
201 浏览

database - 在存储到数据库之前先用自己腌制一个秘密,有什么弱点?

我听说有人使用这种方法,想知道它的含义是什么。我只知道这是个坏主意!

据我了解,在将哈希存储到数据库之前对密码进行加盐的主要目的是使每个哈希算法都独一无二,因此在尝试破解它时需要为每个用户提供一个新的彩虹表。

如果纯文本只是自己加盐,那么在这种情况下哈希如何被削弱?

一个例子:

以下方法是否具有相同的弱点或任何其他弱点?

0 投票
3 回答
2376 浏览

security - 我是否必须将盐与哈希放在同一列中?

所以,我很喜欢使用每个用户的盐来散列我的用户密码。但是,在接受的答案中有一条建议:

不要为盐使用单独的列。

这对我来说没有意义。如果我只是将哈希和盐连接起来并将它们放在同一列中,那么这在语义上肯定等同于两个单独的列吗?在这种情况下,这只是默默无闻的安全,不是吗?

使用单独的列来存储盐更容易(只要它是每个用户的)。为什么我不应该?

0 投票
11 回答
63671 浏览

php - 如何生成好的盐 - 我的功能是否足够安全?

这是我用来生成随机盐的函数:

这是一个非商业网站。它仅用于生成盐(存储在数据库中并与用户提交的密码一起用于散列)。

这合适吗?我应该使用更大的字符子集吗?如果是这样,在 PHP 中是否有一种简单的方法可以做到这一点?

0 投票
6 回答
12818 浏览

php - 使用盐验证用户登录

我正在使用来加密我的用户密码。我正在使用 PHP,这里是用户注册过程中发生的事情的一个快速示例。

这里是:

PHP代码:

现在一切都在我的脚本中为我工作。但我的问题是,我如何验证用户登录?新的加密密码是随机的,所以我无法将登录表单中的密码与数据库中保存的加密密码进行比较。

我已经搜索并找不到解决方案。也许我搜索得不够努力,但是有没有办法解密密码?我可以做些什么来使用我的脚本对用户进行身份验证?