Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较PHP、Java和random salt生成的哈希_Java_Php_Hash - Fatal编程技术网

比较PHP、Java和random salt生成的哈希

比较PHP、Java和random salt生成的哈希,java,php,hash,Java,Php,Hash,我对哈希比较有问题。我正在开发需要验证用户身份的应用程序。在大多数情况下,这不是问题,但该应用程序是对现有网站的补充,所以该网站有自己的身份验证方法。该网站是使用Contao框架制作的,我很难找到有用的信息 搜索后,我发现该网站正在使用Encryption::hash()方法,在大多数情况下,该方法使用以下代码: crypt($strPassword, '$6$' . md5(uniqid(mt_rand(), true)) . '$’); 正如任何人都能看到的那样,盐是随机的,所以我不能重新

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

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

crypt($strPassword, '$6$' . md5(uniqid(mt_rand(), true)) . '$’);
正如任何人都能看到的那样,盐是随机的,所以我不能重新创建哈希

我有一个字符串,上面是他输入的用户密码,上面是代码,上面是从数据库中通过代码生成的散列。 是否有任何方法(我肯定有,因为网站正在运行)来检查带有用户密码的字符串是否正确? 或者换句话说,若数据库中的哈希是使用用户输入的登录密码生成的

我希望有Java的解决方案,但PhP也会被接受


请帮助。

无法重新创建随机盐。您可以执行以下操作: 1/将数据库中的随机盐另存为第二个密码。 然后,数据库中会有:

username  | password   | salt
sridesmet | md5string  | randomgeneratedsalt
如果要检查用户使用的密码是否正确,只需执行以下操作:

(md5($UserTypedPassword.$saltDB) == $passwordDB)
2/不要使用随机盐,使用普通盐,如$username。'hellothissasalt' 方法与上述相同,只是盐不必储存

至于Contao CMS,我认为他们使用以下方法:

编辑: 甚至Contao的作者也有将散列存储在数据库中的想法:

使用Contao登录时的工作方式如下:

    $blnAuthenticated = ($strSalt == '') ? ($strPassword === sha1(\Input::postRaw('password'))) : ($strPassword === sha1($strSalt . \Input::postRaw('password')));

来源:

您仍然可以使用示例1中所示的相同代码检查哈希值:@Bailey Herbert谢谢您的帮助!我在哪里可以为您添加一些声誉积分?你能把这个评论移到一个答案上来吗?我会接受这个解决方案。