相关疑难解决方法(0)

如果存储在数据库中,使用salt如何使密码更安全?

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

所以,据我所知,安全密码系统的工作原理如下:

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

登录尝试后:

  • 用户尝试登录
  • 系统使用相同的加密算法创建尝试哈希
  • 系统将尝试的哈希与数据库中的密码哈希进行比较.
  • 如果匹配,他们会被允许进入.如果没有,他们必须再试一次.

据我所知,这种方法受到彩虹攻击 - 其中可能发生以下情况.

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

因此,围绕它的方法是将哈希与唯一的盐结合起来.在许多情况下,用户注册的当前日期和时间(低至毫秒).

但是,此salt存储在数据库列'salt'中.

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

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

encryption passwords cryptography salt

13
推荐指数
2
解决办法
2897
查看次数

比较两个密码哈希 - nodejs

我使用加密https://nodejs.org/api/crypto.html进行密码加密和身份验证.我正在处理更改密码页面,并且在确定用户提供的密码是否具有与现有密码相同的哈希值时遇到问题.以下是我的代码.

var createSalt = function createSalt() {
    return crypto.randomBytes(128).toString('base64');
};

var hashPwd = function hashPwd(salt, pwd) {
    var hmac = crypto.createHmac('sha256', salt);
    return hmac.update(pwd).digest('hex');
};

//use password , create salt, hash and compare with the existing
var salt = createSalt();
var passHash = hashPwd(salt,data.Password);
console.log('the password is', user.PassHash === passHash);
Run Code Online (Sandbox Code Playgroud)

我期待上面的控制台消息在现有用户密码匹配时打印为true.但是,这两个哈希似乎根本不匹配.请问我错过了什么?怎么做到这一点?我想确保用户密码与他现有的密码匹配后才能更改新密码.任何帮助,将不胜感激.

hash cryptography node.js

5
推荐指数
1
解决办法
8072
查看次数

如何验证使用随机盐散列的密码?

我正在开发一个网络应用程序。现在从安全角度来看,密码从客户端发送到服务器时需要加盐散列。 现在我的问题是,如果我随机生成一个盐,将它附加到密码并散列组合,如何验证这个密码。由于生成的盐是随机的,盐+密码组合的哈希值每次都会不同。 如果我将生成的盐和用户凭据一起发送到服务器,这将暴露盐。暴露的盐会造成类似的麻烦,因为试图破解密码的人可以在暴露的盐上附加不同的密码以获取哈希值并进行匹配。我已经检查了许多网站和有关堆栈溢出的问题,但没有完全符合我的需要。

有一些工具可以读取浏览器的内存并窃取输入的密码。因此,客户端也需要加盐哈希。

javascript sha256 owasp saltedhash penetration-testing

3
推荐指数
2
解决办法
4576
查看次数

将用户名和密码存储在数据库中是否安全?

我有人在一个部落中提交用户名和密码,我需要知道使用此代码将其提交到数据库中是否安全,或者它是否在数据库中是安全的.

MySQLCon.Open()
Dim SQLADD As String = "INSERT INTO members(username,password) VALUES(@memberToAdd, @memberPassword)"
COMMAND = New MySqlCommand(SQLADD, MySQLCon)
COMMAND.Parameters.AddWithValue("@memberToAdd", memberToAdd.Text)
COMMAND.Parameters.AddWithValue("@memberPassword", membersPassword.Text)
COMMAND.ExecuteNonQuery()
MySQLCon.Close()
MySQLCon.Dispose()
Run Code Online (Sandbox Code Playgroud)

我使用参数来避免SQL注入攻击.

-------------------------------------------------- --------------------------------

这不是重复,因为它以不同的方式询问和存储密码.它使用MD5来散列密码.

.net mysql vb.net

2
推荐指数
1
解决办法
2452
查看次数