加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

用PHP和MySQL解析我的哈希

发布时间:2020-12-13 16:28:22 所属栏目:PHP教程 来源:网络整理
导读:像大多数用户一样,我只是试图找出一种安全的方式来存储密码.我在这里找不到的东西(或者也许是我的缺乏理解)是如何在我的数据库中检索一个盐渍哈希,并将盐与散列密码分开,特别是在每个口令中使用独特的盐,同时将盐密码保存在一个柱. 我正在找到所有这些很酷的
像大多数用户一样,我只是试图找出一种安全的方式来存储密码.我在这里找不到的东西(或者也许是我的缺乏理解)是如何在我的数据库中检索一个盐渍哈希,并将盐与散列密码分开,特别是在每个口令中使用独特的盐,同时将盐密码保存在一个柱.

我正在找到所有这些很酷的方法加密密码(SHA-256,但是MySQL只支持SHA / 1和MD5?)以及PHP手册中的其他内容,但不知道如何存储和检索密码.

所以,这是我所了解的全部:

SHA('$salt'.'$password') // My query sends the password and salt 
                         // (Should the $salt be a hash itself?)

之后,我失去了盐.

检索密码没有盐很容易,但盐混淆了我.我从哪里获得$salt的价值,特别是如果它是独一无二的和安全的?我将其隐藏在另一个数据库中吗?恒(似乎不安全)?

编辑:HMAC中的关键变量是盐还是其他?

首先,您的DBMS(MySQL)不需要对加密散列进行任何支持.你可以在PHP方面做所有这些,这也是你应该做的.

如果要将salt和hash存储在同一列中,则需要连接它们.

// the plaintext password
$password = (string) $_GET['password'];

// you'll want better RNG in reality
// make sure number is 4 chars long
$salt = str_pad((string) rand(1,1000),4,'0',STR_PAD_LEFT);

// you may want to use more measures here too
// concatenate hash with salt
$user_password = sha512($password . $salt) . $salt;

现在,如果要验证您所做的密码:

// the plaintext password
$password = (string) $_GET['password'];

// the hash from the db
$user_password = $row['user_password'];

// extract the salt
// just cut off the last 4 chars
$salt = substr($user_password,-4);
$hash = substr($user_password,-4);

// verify
if (sha512($password . $salt) == $hash) {
  echo 'match';
}

您可能想看看phpass,它也使用这种技术.这是一个PHP散列解决方案,其中使用盐析.

你一定要看看WolfOdrade链接到的问题的答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读