创建可从vb.net中的PHP verify_password()读取的密码

时间:2017-09-21 20:55:01

标签: php vb.net authentication bcrypt

我在vb.net中有一个应用程序,我想在我的数据库中存储一个可以从PHP理解的密码。 PHP中的创建是这样的:

$hash = password_hash("mypassword", PASSWORD_DEFAULT);

结果如下:

$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

和php中验证密码的代码看起来像是

if (password_verify('mypassword', $hash)) {

    echo 'Password is valid!';

} else {

    echo 'Invalid password.';

}

如何复制此代码

$hash = password_hash("mypassword", PASSWORD_DEFAULT);

iv VB.Net,结果会完全匹配吗?

1 个答案:

答案 0 :(得分:0)

根据the php password_hash documentation,此函数使用BCrypt或Blowfish作为散列算法。看起来你正在使用前者。 NuGet上有一个BCrypt library available for .Net on Github,也许还有其他选项。您需要尝试使用它来格式化输出以匹配php。

此外,文档说password_hash()嵌入了随机生成的salt值作为返回哈希的一部分。您必须查看elsewhere in the documentation以查看其格式。它表示salt是第三个$之后的前22个字符,实际哈希包含字符串的其余部分。第三个$之前的所有内容都表示算法和成本因素。我建议从本段链接中阅读整篇文档。

剩下的就是在散列之前了解盐如何与原始密码结合使用。我看到一些迹象表明它附加在密码的末尾,但您需要自己验证。第一段中第一个链接的示例#3也有有用的信息,表明php会接受以下结果作为有效的盐:mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)