使用PHP检查mysql数据库中的用户名和哈希/加盐密码

使用PHP检查mysql数据库中的用户名和哈希/加盐密码,php,mysql,login,passwords,salt,Php,Mysql,Login,Passwords,Salt,验证用户登录时,是否可以先搜索用户名,然后检索哈希密码和salt,并将其与用户输入进行比较 或者,用户输入的用户名的salt是否应该自己检索,然后使用输入的密码进行散列,并与数据库中的最终散列进行比较 本质上,在知道用户输入的密码是否有效之前,从数据库中为输入的用户名存储密码是否安全?您可以同时检查登录名和密码。获取原始密码;对其进行加密,然后检查加密密码和用户名组合是否存在。当然,db中的密码在使用之前应该经过加密和哈希处理 if($loginname AND $loginpass){

验证用户登录时,是否可以先搜索用户名,然后检索哈希密码和salt,并将其与用户输入进行比较

或者,用户输入的用户名的salt是否应该自己检索,然后使用输入的密码进行散列,并与数据库中的最终散列进行比较


本质上,在知道用户输入的密码是否有效之前,从数据库中为输入的用户名存储密码是否安全?

您可以同时检查登录名和密码。获取原始密码;对其进行加密,然后检查加密密码和用户名组合是否存在。当然,db中的密码在使用之前应该经过加密和哈希处理

 if($loginname AND $loginpass){
  $loginpass=sha1($salt1.$loginpass.$salt2,$raw_output=false );

    $userinfo_query="SELECT * FROM users WHERE user_name='$loginname' AND user_pass='$loginpass' LIMIT 1";

  }

如果您查看PHP密码散列API的示例,答案是:不,您从数据库读取用户,并将存储的密码散列与刚从登录表单获得的密码进行比较


请尝试使用这个库——PHP5.5将在本机上支持这些函数,如果您使用PHP5.3.7及更高版本,听起来不必重新发明轮子,只需使用这些函数是一个非常好的主意。做你自己的事情更容易被攻击。

如果你没有从数据库中读取用户,你就无法知道密码的密码。你知道你应该为每个用户使用一个单独的salt,不是吗?@Sven,salt可能是任何东西,而不仅仅是用户名。如果保存,则用户名可能来自会话。有数以百万计的方法来添加盐。是的,但是在未来的PHP中只有一种合理的方法来散列密码。SHA1不是一个合理的密码哈希函数。但是在这种情况下,我不需要做2个数据库查询吗?第一个用于检索用户名行上的salt,第二个用于将现在输入的salt和hash用户密码与数据库中的密码进行比较。@Sam-不,您可以对用户名进行一次查询并获取密码hash
从user WHERE user.name='Sam'
选择passwordhash。之后,如果找到具有此用户名的行,则可以将数据库中的密码哈希与输入的密码进行比较。salt通常是密码散列的一部分,您可以将其与散列的用户输入进行比较(在PHP中进行散列,而不是使用数据库函数)。