我一直在寻找加密密码以便与我的面板一起使用的最佳方式,我决定继续使用BCRYPT,只是由于每次加密的成本以及它一般被认为是目前最好的一种。PHP的password_hash行为()
我使用的是双向盐,所以每个用户都有一个独特的盐,然后显然存储在我的应用程序中的盐,我注意到一些相当奇怪的行为..根据PHP文档,这种行为是正常的?
总之,这里是我的代码使用方法:
$Crypto = new Crypto;
echo $Crypto->encrypt("123456789abcdefghijklm", "StackOverflow_Is_Awesome!"); // First parameter being the "User Salt", second being the password.
// Above outputs $2y$13$123456789abcdefghijkleepFY8JLvsf2YbnWolqQyO3DIzrCeNIu
而现在,加密等级:
<?php
// ASSUMING $this->hashingSalt = HBSNi3y7ruhbVGkhdg83ijdbvghiojkgudL;JP
class Crypto {
private $hashingSalt, $database;
public function __construct($salt)
{
$this->hashingSalt = $salt;
$this->database = new DatabaseFunctions();
}
public function encrypt($salt, $password)
{
$options = array(
'cost' => 13,
'salt' => $salt //22 chars
);
return password_hash($password . $this->hashingSalt, PASSWORD_BCRYPT, $options);
}
}
所以,我关心的是,为什么在地球上是此功能只添加盐在选项中设置输出字符串的开始?它真的很莫名其妙...因为这不是我所说的安全,而是将对象击败给我。
任何人都可以建议,尝试和解释我完全看过去?由于
PHP文件:http://php.net/manual/en/function.password-hash.php
你好,谢谢。首先感谢教育我哈希和加密之间的区别,愚蠢的错误。我现在将开始改变!我已经阅读了这两个链接,并获得了一些关于哈希和我正在使用的api的有价值的知识,所以我想为此感谢你。所以,我所做的一切正确,只是胡椒粉没有什么区别,对吗? – 2013-04-08 00:23:49
嗯,我看到你正试图自己设置盐。在大多数情况下,你不想这样做,因为这是API会为你做的事情,而且它很容易被“搞砸”。如果你想知道它是如何工作的更好,你可以查看代码[in PHP](https://github.com/ircmaxell/password_compat)。 – PeeHaa 2013-04-08 00:26:59
谢谢您的回复,我必须使用该compat-library,因为我仍在等待主机升级到5.5>。我已经查看了代码,发现它实际上非常有用,为什么我的密码最初不是由api中的函数验证的,因为我在使用password_verify()函数之前对它们进行了哈希处理。感谢您的帮助PeeHaa,看起来我过分复杂的事情是真的,与标准没有什么不同!所以,现在我已经设立了所有的盐业务,排除了中间人......谢谢! :) – 2013-04-08 01:02:32