我需要了解这个功能的基础知识.对于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函数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)
(取自维基百科)
有没有办法从我有的哈希转换成上面的哈希?
我正在编写脚本并需要保存密码.出于开发目的,我一直在使用该crypt()功能,因为它简单易用.现在我已经完成了,我想用一些更好,更一致的东西来代替它.
我所担心的一些问题是:
我想要一些适用于PHP 4.3+的东西.
有什么可用的,还是我应该坚持crypt()?我想过要用md5(md5($password).$salt).感谢您的见解.