相关疑难解决方法(0)

在PHP中使用crypt()比较密码

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

Blowfish用盐进行散列如下:"$ 2a $",两位数的成本参数"$",以及字母"./0-9A-Za-z"中的22位64位数字.在salt中使用此范围之外的字符将导致crypt()返回零长度字符串

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

echo crypt('rasmuslerdorf', '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringforsalt$');
Run Code Online (Sandbox Code Playgroud)

然而,它吐出:

$2a$07$usesomadasdsadsadsadaeMTUHlZEItvtV00u0.kb7qhDlC0Kou9e
Run Code Online (Sandbox Code Playgroud)

看来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?
}    
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间

php encryption bcrypt

17
推荐指数
1
解决办法
3万
查看次数

你能将php crypt()的输出转换为有效的MD5吗?

我有一些使用PHP函数crypt()加密的字符串.

输出看起来像这样:

$1$Vf/.4.1.$CgCo33ebiHVuFhpwS.kMI0
$1$84..vD4.$Ps1PdaLWRoaiWDKCfjLyV1
$1$or1.RY4.$v3xo04v1yfB7JxDj1sC/J/
Run Code Online (Sandbox Code Playgroud)

虽然我相信crypt()正在使用MD5算法,但输出不是有效的MD5哈希值.

有没有办法将生成的哈希值转换为有效的MD5哈希值(16字节十六进制值)?


更新:

感谢回复到目前为止的答案.我很确定使用的crypt函数是使用某种MD5算法.我要做的是将我拥有的输出转换为MD5哈希,如下所示:

9e107d9d372bb6826bd81d3542a419d6  
e4d909c290d0fb1ca068ffaddf22cbd0  
d41d8cd98f00b204e9800998ecf8427e
Run Code Online (Sandbox Code Playgroud)

(取自维基百科)

有没有办法从我有的哈希转换成上面的哈希?

php hash md5 crypt cryptography

6
推荐指数
1
解决办法
8900
查看次数

crypt()的替代方案

我正在编写脚本并需要保存密码.出于开发目的,我一直在使用该crypt()功能,因为它简单易用.现在我已经完成了,我想用一些更好,更一致的东西来代替它.

我所担心的一些问题是:

  • 并非每个系统都支持所有算法
  • 有时盐预先计算结果(似乎是一个安全问题)

我想要一些适用于PHP 4.3+的东西.

有什么可用的,还是我应该坚持crypt()?我想过要用md5(md5($password).$salt).感谢您的见解.

php crypt

6
推荐指数
1
解决办法
1512
查看次数

标签 统计

php ×3

crypt ×2

bcrypt ×1

cryptography ×1

encryption ×1

hash ×1

md5 ×1