我不理解php.net处的文档。在对原始加密进行测试时,似乎他们使用加密版本的密码作为盐。
当我使用可选的第二个参数(盐)插入crypt时,我得到相同密码的不同加密版本。这是预期的行为吗?
但是,如果我插入第二个参数'd4',那么我会获得相同密码输入的相同加密密码。预期的行为。
在注册之前插入:
$pass = crypt('$pass', 'd4'); // after this I insert $pass into the mysql table
登录测试:
$pass = crypt($pass, 'd4'); // after this I test $pass against the mysql table
PHP.net文档:
<?php
$password = crypt('mypassword'); // let the salt be automatically generated
/* You should pass the entire results of crypt() as the salt for comparing a
password, to avoid problems when different hashing algorithms are used. (As
it says above, standard DES-based password hashing uses a 2-character salt,
but MD5-based hashing uses 12.) */
if (crypt($user_input, $password) == $password) {
echo "Password verified!";
}
?>
这是如何运作的?
答案 0 :(得分:3)
由于crypt()
仅使用salt参数的前两个字符(或任何CRYPT_SALT_LENGTH
),传入加密密码(其中第一个字符是最初用于加密的盐)做对了。
如果没有传入salt参数,则生成并使用随机盐。
答案 1 :(得分:0)
如果你的问题是......对于某些加密密码,使用不同的加密字符串返回相同的密码/输入是否正常?答案是肯定的。不确定你所提到的关于盐的内容。把它加盐只盐。最后它是一个迂回,没有任何意义。不建议使用密码或加密形式的密码作为盐,但通常使用短语的一些随机散列(base64)。如果没有,请告诉我,我会再试一次。