哈希比较有问题。我正在开发需要验证用户身份的应用。在大多数情况下,这不是问题,但应用程序是现有网站的补充,因此网站有自己的身份验证方法。该网站是使用Contao Framework制作的,我很难找到有用的信息。
搜索后我发现该网站使用的是Encryption :: hash()方法,在大多数情况下使用以下代码:
crypt($strPassword, '$6$' . md5(uniqid(mt_rand(), true)) . '$’);
任何人都可以看到盐是随机的,所以我无法重新创建哈希值。
我有一个字符串,上面是他输入的用户密码,上面的代码和上面代码从数据库中生成的哈希。 无论如何(我确定因为网站正在工作)检查用户密码是否正确的字符串? 或者换句话说,如果来自数据库的哈希是使用用户键入登录的密码制作的。
我想用Java解决方案,但PhP也会被接受。
请帮忙。
答案 0 :(得分:0)
无法重新创建随机盐。您可以执行以下操作: 1 /将随机盐保存在数据库中作为第二个密码。 然后,您将拥有数据库:
username | password | salt
sridesmet | md5string | randomgeneratedsalt
如果您想检查用户使用的密码是否正确,您只需执行以下操作:
(md5($UserTypedPassword.$saltDB) == $passwordDB)
2 /不要使用随机盐,使用普通盐,如$ username.'Hellothisisasalt'
除了不必存储盐外,该方法与上述方法相同。
至于Contao CMS,我认为他们使用以下方法:http://api.contao.org/classes/Contao.Encryption.html
编辑: 甚至是Contao作者的想法是将哈希存储在数据库中:https://github.com/contao/core/issues/142
使用Contao登录的方式如下:
$blnAuthenticated = ($strSalt == '') ? ($strPassword === sha1(\Input::postRaw('password'))) : ($strPassword === sha1($strSalt . \Input::postRaw('password')));
来源:https://github.com/contao/core/blob/master/system/modules/core/library/Contao/User.php