当前位置: 首页 > 面试题库 >

SHA1 vs md5 vs SHA256:哪个用于PHP登录?

谢雅珺
2023-03-14
问题内容

我正在进行php登录,并且试图确定是使用SHA1还是Md5,还是我在另一stackoverflow文章中了解到的SHA256。他们中的任何一个比其他人更安全吗?对于SHA1/ 256,我还使用盐吗?

另外,这是将密码作为哈希存储在mysql中的安全方法吗?

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);

问题答案:

都不行
您应该使用bcrypt。您提到的散列均经过优化,可在硬件上快速便捷地使用,因此破解它们具有相同的品质。如果您别无选择,至少要确保使用长盐并多次重新哈希。

在PHP 5.5+中使用bcrypt

PHP5.5提供了用于密码哈希的新功能。这是在现代Web应用程序中存储密码的推荐方法。

// Creating a hash
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// If you omit the ['cost' => 12] part, it will default to 10

// Verifying the password against the stored hash  
if (password_verify($password, $hash)) {
    // Success! Log the user in here.
}

如果您使用的是旧版本的PHP,则确实应该升级,但是在您这样做之前,您可以使用password_compat公开此API。

另外,请让我们password_hash()为您生成盐。它使用CSPRNG。

bcrypt的两个警告

  1. Bcrypt会自动截断任何长度超过72个字符的密码。
  2. Bcrypt将在任何NUL字符后截断。

(这里有两个警告的概念证明。)

在通过bcrypt运行密码之前,您可能会通过预先散列密码来解决第一个警告,但这可能会使您的应用程序先运行到第二个。

不用编写自己的方案,而使用由安全专家编写和/或评估的现有库。

  • Zend\Crypt(Zend Framework的一部分)提供 BcryptSha
  • PasswordLock与相似,BcryptSha但它还使用认证的加密库加密bcrypt哈希。

TL; DR - 使用bcrypt。



 类似资料:
  • 我已经对我的注册脚本中的密码进行了加密,它们存储在数据库中,我必须使用它们登录,所以我想使用未加密的密码登录。我已经阅读了这里的一些帖子,但没有任何帮助。我如何才能将其添加到我的登录中。php?盐也存储在数据库中。 这是我的登记簿。用于加密的php脚本 这是我的季节login.php

  • 本文向大家介绍基于PHP实现用户注册登录功能,包括了基于PHP实现用户注册登录功能的使用技巧和注意事项,需要的朋友参考一下 本文介绍的是基于PHP实现用户注册登录功能,本项目分为四部分内容:1前端页面制作,2验证码制作,3实现注册登陆,4功能完善。具体情况可以往下看。 验证码制作 一、实验简介 本次实验将会带领大家使用面向对象的思想封装一个验证码类。并在注册和登陆界面展示使用。通过本次实验的学习,

  • 我试图使用xpath点击“stackoverflow”主页上的“登录”链接,如下所示。但没有成功 驾驶员findElement(By.xpath(“//a[contains(text(),'log in')]”)。单击(); 请帮我解决我这里缺少的问题。 谢谢

  • 我带着很大的希望来到这里解决我的问题。我有这个网站,我想登录并访问一个会员专页。所以基本上php代码使用cURL登录,然后打开一个只有成员的页面。下面是我使用的代码。但每次我尝试访问会员专页时,它都会要求我登录。因此它不会保存在我已经登录的会话或cookie中。 我得到的结果是: 登录HTTP/1.1 200 OK Server:nginx日期:2014年6月12日星期四14:21:01 GMT内

  • 试图在Android上获得用户认证工作。 Android应用程序使用POST方法发送用户名和密码。但是,我一直收到“错误接收详细信息!!”错误。我尝试使用REST控制台查看Web服务是否有效,但没有成功,即使在那里我也会收到相同的错误。 如有任何帮助或指导,我们将不胜感激。 已经构建了一个PHP Web服务,代码是: Android应用以 json 格式发送请求: JOSN 请求数据:{“密码”:

  • 问题内容: 我试图在PHP的一次调用中发出多个INSERT语句。问题是我得到了这个错误: 我猜这是每个声明之后。 所以现在,我的问题是如何制作多个可以在其中运行的INSERT语句? 到目前为止,这是我的查询: 编辑 : 请注意,由于我使用的是SQL语句,因此查询末尾没有任何内容。 问题答案: 只需将所有语句包装到匿名PL / SQL块中即可: Oracle不支持批量命令。匿名PL / SQL块作为