比较用随机盐PHP,Java制作的哈希

时间:2014-07-30 14:22:58

标签: java php hash

哈希比较有问题。我正在开发需要验证用户身份的应用。在大多数情况下,这不是问题,但应用程序是现有网站的补充,因此网站有自己的身份验证方法。该网站是使用Contao Framework制作的,我很难找到有用的信息。

搜索后我发现该网站使用的是Encryption :: hash()方法,在大多数情况下使用以下代码:

crypt($strPassword, '$6$' . md5(uniqid(mt_rand(), true)) . '$’);

任何人都可以看到盐是随机的,所以我无法重新创建哈希值。

我有一个字符串,上面是他输入的用户密码,上面的代码和上面代码从数据库中生成的哈希。 无论如何(我确定因为网站正在工作)检查用户密码是否正确的字符串? 或者换句话说,如果来自数据库的哈希是使用用户键入登录的密码制作的。

我想用Java解决方案,但PhP也会被接受。

请帮忙。

1 个答案:

答案 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