我在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,结果会完全匹配吗?
答案 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)
。