我一直在寻找最好的方式来加密与我的面板一起使用的密码,我决定继续使用BCRYPT,这是因为每次加密的成本高昂,而且通常认为它是目前可用的最佳密码之一.当前时间.
我使用双向盐,所以每个用户都有一个独特的盐,然后显然是存储在应用程序中的盐,我注意到了一些相当奇怪的行为..根据PHP文档,此行为是正常的吗?
无论如何,这是我使用的代码:
$Crypto = new Crypto;
echo $Crypto->encrypt( "123456789abcdefghijklm", "*_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
解决方法:
那里的盐是为了防止用哈希表制作预先计算的表的可能性,并且一旦“坏蛋”接触到哈希表,就不能保证安全.
还有你在做什么:
and then obviously the salt stored within my application
被称为胡椒粉(实际上并没有那么明显),并且AFAIK还没有被证明更安全.有关更多信息,请阅读此博客文章(也由密码API的作者撰写):http://blog.ircmaxell.com/2012/04/properly-salting-passwords-case-against.html
还要注意,您的称为crypto方法不会对任何内容进行加密.加密有两种方式.您正在执行的操作称为哈希:https://*.com/a/4948393/508666