什么是最快且安全的密码加密方式(最好用PHP实现),无论您选择哪种方法,它是否具有可移植性?
换句话说,如果我将来将我的网站迁移到不同的服务器上,我的密码是否仍然有效?
据我所知,我现在正在使用的方法依赖于服务器上安装的库的确切版本。
什么是最快且安全的密码加密方式(最好用PHP实现),无论您选择哪种方法,它是否具有可移植性?
换句话说,如果我将来将我的网站迁移到不同的服务器上,我的密码是否仍然有效?
据我所知,我现在正在使用的方法依赖于服务器上安装的库的确切版本。
我和Peter持有相同观点。开发者似乎不太理解密码学。我们都选择(我也有这个问题)MD5或SHA1,因为它们速度快。最近有人指出来这种做法没有任何道理。我们应该选择一种非常慢的哈希算法。考虑到实际情况,一个繁忙网站每隔多久会对密码进行哈希?每半分钟?服务器用时从0.03秒变成0.8秒又有什么关系呢?但是这种额外的缓慢能够有效地防止各种常见的暴力攻击。
根据我的了解,bcrypt是专门设计用于安全密码哈希的,它基于blowfish算法,并且有许多实现方式。
对于PHP用户,请查看PHP Pass。
对于.NET用户,请查看BCrypt.NET。
String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
无论你做什么,都不要编写自己的加密算法。这样做几乎可以保证(除非你是密码学家),算法中会存在缺陷,使其易于破解。
考虑使用bcrypt
,它被许多现代框架如laravel所使用。
我不一定要求最快的,而是要一个很好的平衡。这段代码正在开发的一些服务器相当慢,用于哈希和存储密码的脚本需要5-6秒才能运行,我已经缩小了问题范围,发现是哈希造成的(如果我注释掉哈希,它可以在1-2秒内运行)。
它不必是最安全的,我现在不是为银行编码,但我肯定不会以明文形式存储密码。
在插入数据库时,请使用此函数 Password_harsh($password,PASSWORD_DEFAULT)。当从数据库中选择时,您可以使用函数 if(password_verify($password,$databasePassword)) 将要插入的密码与数据库中的密码进行比较。
}else{
echo "password not correct";
}
这将以安全格式加密密码
password_hash ( string $password , int $algo [, array $options ] )
。 (PHP 5 >= 5.5.0, PHP 7)
password_hash()
使用强大的单向哈希算法创建新的密码哈希。 password_hash()
与crypt()
兼容。因此,由crypt()
创建的密码哈希可以与password_hash()
一起使用。