我有一个简单的密码加密程序,当用户注册时,它会给我一个散列/盐析密码,以存储在我的数据库中。代码:
public static string GenerateHashWithSalt(string enteredPassword, string enteredSalt)
{
string sHashWithSalt = enteredPassword + enteredSalt;
byte[] saltedHashBytes = Encoding.UTF8.GetBytes(sHashWithSalt);
System.Security.Cryptography.HashAlgorithm algorithm = new System.Security.Cryptography.SHA256Managed();
byte[] hash = algorithm.ComputeHash(saltedHashBytes);
return Convert.ToBase64String(hash);
}
当用户登录时,我想我不能简单地通过此代码将输入的密码放回并进行比较,因为这会给我一个不同的结果。如何简单地将存储的密码与输入的登录密码进行比较?
如果您只需要一种比较密码的方法,那么这可能会有所帮助:加密/解密
我写了一篇关于盐渍哈希密码等效方案如何工作的快速教程。然而,基于您提出的问题,我应该提醒您,这只是确保安全登录过程的第一步。如果你是一个初学者,你应该雇佣一位安全专家或购买一个现成的解决方案,而不是试图推出自己的解决方案。犯下一个使系统不安全的不为人知的错误的方法有很多。
http://blogs.msdn.com/b/ericlippert/archive/tags/salt/
创建帐户时,您将有一个密码哈希
列,该列将由GenerateHashWitSalt(密码,盐)填充;
其中密码由他们提供,然后随机生成盐。然后盐将与密码哈希一起存储。
然后,当您需要查看用户名/密码是否有效时,可以使用storedpassword==GenerateHashWithSalt(providedPassword,saltFromDb)或类似的方法。如果他们的密码相同,那么你就知道他们输入了正确的密码
我有一个网页,使用bcrypt加密用户名密码,这些密码然后存储在数据库中。我有一个运行在QT上的C++程序,它需要对用户进行身份验证,为了做到这一点,我必须加密用户输入的密码,并将其与数据库中的密码进行比较。这是正确的做法吗?如果是的话,我该如何做到这一点?用户输入的密码的加密必须与bcrypt的加密相同,我如何做到这一点?提前道谢。
X2.1.0新增 sp_compare_password($password,$password_in_db) 功能: CMF密码比较方法,所有涉及用户密码比较的地方都用这个方法 参数: $password: 用户输入的密码 $password_in_db:数据库保存的经过加密后的密码串 返回: 类型boolean,密码相同,返回true 使用: $is_right = sp_compare_p
我的应用程序中有一个用例,它应该防止用户在重置密码时选择最后3个密码中的一个。我使用Angular作为前端,spring boot作为后端。在我的场景中,用户密码存储为bcrypt哈希。 如何将用户输入的密码与最近3个存储的bcrypt密码进行比较? 当我运行下面的代码片段示例时, 它生成以下bcrypt哈希。每个散列都是不同的,这是合理的,因为当我检查时,我可以看到生成的salt是随机值。 sp
我已经使用带有JPA的安全性实现了。我的所有RESTendpoint现在都可以验证客户端请求的头。密码的验证由框架完成。现在我需要能够验证一个密码与存储的密码哈希。 在默认配置下,用户密码以散列形式存储,并使用函数。如何检查给定的密码字符串是否与存储的bcrypt哈希值匹配? 来源:https://quarkus.io/guides/security-jpa
cmf_compare_password($password, $passwordInDb) 功能 CMF密码比较方法,所有涉及密码比较的地方都用这个方法 参数 $password: string 要比较的密码 $passwordInDb: string 数据库保存的已经加密过的密码 返回 boolean 密码相同,返回true
我正在使用以下代码创建哈希密码和salt: 我正在数据库中存储HashedPassword和Salt。 现在我要验证用户登录时的密码: 这不起作用,我得到了一个完全不同的哈希密码,而不是存储在数据库中的密码。据我所知,您应该在用户登录时输入的密码之前预置salt,然后运行相同的哈希密码函数。上面不是等价于那个吗?