php crypt 效率,在PHP中使用crypt()比较密码

我需要了解这个功能的基础知识.对于blowfish算法,php.net文档指出:

Blowfish hashing with a salt as follows: “$2a$”, a two digit cost parameter, “$”, and 22 base 64 digits from the alphabet “./0-9A-Za-z”. Using characters outside of this range in the salt will cause crypt() to return a zero-length string

因此,根据定义,这不应该起作用:

echo crypt('rasmuslerdorf', '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringforsalt$');

然而,它吐出:

$2a$07$usesomadasdsadsadsadaeMTUHlZEItvtV00u0.kb7qhDlC0Kou9e

看来crypt()已将盐本身切成22的长度.有人可以解释一下吗?

我无法理解这个功能的另一个方面是当他们使用crypt()来比较密码时. http://php.net/manual/en/function.crypt.php(见前#1).这是否意味着如果我使用相同的盐来加密所有密码,我必须首先加密它?即:

$salt = "usesomadasdsadsadsadae";

$salt_crypt = crypt($salt);

if (crypt($user_input, $salt) == $password) {

// FAIL WONT WORK

}

if (crypt($user_input, $salt_crypt) == $password) {

// I HAVE TO DO THIS?

}

谢谢你的时间

解决方法:

以下代码示例可能会回答您的问题.

要使用Blowfish生成散列密码,首先需要生成一个salt,它以$2a $开头,后跟迭代计数和22个字符的Base64字符串.

$salt = '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringfors';

$digest = crypt('rasmuslerdorf', $salt);

将整个$digest存储在数据库中,它包含salt和digest.

比较密码时,只需这样做,

if (crypt($user_input, $digest) == $digest)

您正在重复使用摘要作为盐. crypt知道算法标识符中的salt有多长.

标签:php,encryption,bcrypt

来源: https://codeday.me/bug/20190925/1817841.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值