当前位置: 首页 > 知识库问答 >
问题:

无法将哈希和salt密码与数据库值匹配

娄利
2023-03-14

我正在开发一个应用程序,员工将首先通过输入loginID和密码注册到系统中。密码经过哈希和盐析并存储在登录表中(这两个值都与loginID值一起存储)。但是,当我逐步遍历代码并登录到应用程序时(在注册过程之后),哈希值和salt值永远不匹配。

用户登录到系统时,我将如何验证他们的密码?

加密功能:

protected static void EncryptPassword(eWebEmployee oEmp)
{
    // Create Hash & Salt
    sysSecurity oSecurity = new sysSecurity();
    oEmp.EmpPasswordSalt = oSecurity.CreateSalt(5);
    oEmp.EmpPasswordHash = oSecurity.CreatePasswordHash(oEmp.EmpPasswordSalt, oEmp.EmpPassword);        
}  

数据库调用:

oDbConn.Open();
DbDataReader oDbDataReader = oDbCommand.ExecuteReader();
while (oDbDataReader.Read())
{
    if (!oDbDataReader.IsDBNull(0) && !oDbDataReader.IsDBNull(1))
    {
        if (oEmp.EmpPasswordSalt == oDbDataReader.GetString(1)
            && oEmp.EmpPasswordHash == oDbDataReader.GetString(0))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
oDbConnection.Close();
}

共有2个答案

宗政招
2023-03-14

要理解代码的用途有点困难,但通常使用salt值和密码字符串创建哈希。再次登录时,使用相同的salt值执行完全相同的操作。然后将密码散列与数据库中的密码散列进行比较。

胡俊弼
2023-03-14

我读代码的方式是每次都创建一个新的salt。您应该从数据库中获取salt,使用用户提供的密码计算散列,然后将散列与存储在数据库中的散列进行比较。如果它们相等,则用户输入了正确的密码。仅在注册时创建新的salt。

 类似资料:
  • 我有个问题。从数据库检索salt值时,我的哈希密码值不匹配。 登记php > 用户输入用户名和密码。 通过POST收集用户名和密码。 生成随机盐值将盐值添加到密码值的末尾(由用户输入)。并散列全部值。 将用户名、盐、hashed密码和原始密码插入数据库(仅用于测试) } 登录。php > if(isset($_POST["用户名"]) }

  • 我已经对我的注册脚本中的密码进行了加密,它们存储在数据库中,我必须使用它们登录,所以我想使用未加密的密码登录。我已经阅读了这里的一些帖子,但没有任何帮助。我如何才能将其添加到我的登录中。php?盐也存储在数据库中。 这是我的登记簿。用于加密的php脚本 这是我的季节login.php

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 问题内容: 我正在尝试从位于slicehost(两个不同的托管公司)的服务器中的php脚本连接到dreamhost上的mysql服务器。我需要这样做,以便可以将slicehost上的新数据传输到dreamhost。使用转储不是一种选择,因为表结构不同,我只需要传输一小部分数据(每日记录100-200条),问题是我在slicehost和dreamhost上使用了新的MySQL密码哈希方法使用旧的,所

  • 我正在写一个Django应用程序,需要与现有的Java播放框架应用程序一起工作。Play应用程序使用PasswordHash.java来存储密码。它以冒号分隔的格式存储密码。每个哈希都存储为::。 例如,下面是密码“测试”的条目: 在这里,我们可以通过拆分字符串并找到: 迭代次数: 盐: PBKDF2哈希:。 我修改了Django的check_密码机制以与此格式兼容,但发现它认为密码不正确。我用了

  • 如果用户创建了一个新密码,并通过哈希算法存储在数据库中,则在用户登录时可以将其与用户输入的密码进行匹配。输入到登录屏幕的密码将被哈希化,然后检查它是否与存储的哈希匹配。如果是,则允许用户访问。 然而,如今,密码是经过哈希和盐处理的。因此,当用户第一次注册密码时,它会经过一个散列,然后会被加密10000次以上。这个salt与后端代码生成的关键字相同,还是每次salt都随机生成? 当用户输入密码登录时