Ton*_*ark 132 php md5 sha1 login sha256
我正在进行php登录,我正在尝试决定是否使用SHA1或Md5,或者我在另一篇stackoverflow文章中读到的SHA256.他们中的任何一个比其他人更安全吗?对于SHA1/256,我还使用盐吗?
另外,这是一种将密码存储为mysql中的哈希的安全方法吗?
function createSalt()
{
$string = md5(uniqid(rand(), true));
return substr($string, 0, 3);
}
$salt = createSalt();
$hash = sha1($salt . $hash);
Run Code Online (Sandbox Code Playgroud)
Joh*_*set 106
都不是.你应该用bcrypt.你提到的哈希都经过优化,可以快速简便地在硬件上使用,因此破解它们具有相同的特性.如果您没有其他选择,至少一定要使用长盐并重新哈希多次.
PHP 5.5提供了密码散列的新功能.这是现代Web应用程序中密码存储的推荐方法.
// Creating a hash
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// If you omit the ['cost' => 12] part, it will default to 10
// Verifying the password against the stored hash
if (password_verify($password, $hash)) {
// Success! Log the user in here.
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是旧版本的PHP,那么您确实应该进行升级,但在此之前,您可以使用password_compat来公开此API.
另外,请password_hash()为您生成盐.它使用[CSPRNG](http://
NUL字符后截断.(这里有两个警告的概念证明.)
您可能想通过在通过bcrypt运行密码之前预先解密密码来解决第一个警告,但这样做会导致您的应用程序首先运行到第二个密码.
不要编写自己的方案,而是使用安全专家编写和/或评估的现有库.
Zend\Crypt (Zend Framework的一部分)提供 BcryptShaPasswordLock类似于BcryptSha它,但它也使用经过身份验证的加密库加密bcrypt哈希.TL; DR - 使用bcrypt.
Rog*_*son 22
我认为使用md5或sha256或任何针对速度优化的哈希是完全正常的,我很好奇听到其他用户可能有的任何反驳.这是我的理由
如果允许用户使用弱口令如神,爱情,战争,和平那么无论你仍然会允许用户键入密码加密不是哈希和这些密码往往是第一次使用,因此这是不打算与加密有关.
如果您没有使用SSL或没有证书,那么收听流量的攻击者将能够提取密码,并且任何使用javascript等加密的尝试都是客户端,并且很容易破解和克服.再次,这是不打算有任何瓜葛与服务器端的数据加密.
因为你允许用户输入数据,如果你不具备的3登录限制,甚至更多一点,那么问题将再次强力攻击会利用弱口令,并再次不具有任何与数据加密.
如果您的数据库受到损害,那么很可能一切都已被破坏,包括您的散列技术,无论您制作它有多么神秘.同样,这可能是一个心怀不满的员工XSS攻击或SQL注入或其他与您的密码加密无关的攻击.
我相信你应该仍然加密,但我唯一可以看到加密的方法是阻止已经拥有或以某种方式获得数据库访问权限的人只需大声读出密码.如果是未经授权访问数据库的人那么你就有更大的问题需要担心这就是索尼因为他们认为加密密码保护包括信用卡号码在内的所有内容而保留的原因所有它所做的就是保护那个字段.
我可以看到复杂的数据库密码加密的唯一好处是延迟员工或其他有权访问数据库的人只读取密码.所以如果它是一个小项目或者其他什么我不会担心服务器端的安全性,而是我会担心更多关于保护客户端可能发送到服务器的任何内容,例如sql注入,XSS攻击或过多的其他方式你可能会受到损害.如果有人不同意,我期待着从客户端那里读取超级加密密码的方式.
我之所以想要明确这一点,是因为人们常常认为加密密码意味着他们不必担心它会受到损害而且他们不再担心网站安全问题.
Lex*_*ius 15
正如Johannes Gorset指出的那样,来自Matasano Security的Thomas Ptacek的帖子解释了为什么简单的通用散列函数(如MD5,SHA1,SHA256和SHA512)是不良的密码散列选择.
为什么?它们太快了 - 你可以使用现代计算机计算每个核心每秒至少1,000,000个MD5哈希值,因此对人们使用的大多数密码都是可行的.这比基于GPU的破解服务器集群要少得多!
没有键拉伸的盐析只意味着您无法预先计算彩虹表,您需要特定地为该特定盐构建它.但它不会真的让事情变得更难.
用户@Will说:
每个人都在谈论这个,就像他们可以通过互联网被黑客攻击.如前所述,限制尝试使得无法通过Internet破解密码并且与散列无关.
他们不需要.显然,在LinkedIn的情况下,他们使用常见的SQL注入漏洞来获取登录数据库表并在线下破解数百万个密码.
然后他又回到了离线攻击场景:
当整个数据库遭到破坏时,安全性真正发挥作用,然后黑客可以针对md5哈希每秒执行1亿次密码尝试.SHA512慢大约10,000倍.
不,SHA512不比MD5慢10000倍 - 它只需要大约两倍的时间.另一方面,Crypt/SHA512是一个非常不同的野兽,就像它的BCrypt对应物一样,执行键拉伸,产生一个非常不同的哈希,内置一个随机盐,计算量将达到500到999999倍之间(拉伸是可调的).
SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Run Code Online (Sandbox Code Playgroud)
所以PHP的选择是Crypt/Blowfish(BCrypt),Crypt/SHA256或Crypt/SHA512.或者至少是Crypt/MD5(PHK).见www.php.net/manual/en/function.crypt.php
Kyl*_*ndo 13
使用SHA256.它不是完美的,因为它是SHA512快速哈希的理想选择,但在选项之外,它是明确的选择.根据任何散列技术,请确保使用哈希值来增加安全性.
作为补充说明,FRKT,请告诉我哪里有人可以轻松破解盐渍SHA256哈希?我真的很有兴趣看到这个.
向前移动请使用bcrypt强化哈希.更多信息可以在这里找到.
盐渍编辑:
使用随机数或随机字节流等.您也可以将数据库中记录的唯一字段用作盐,这样每个用户的盐就不同了.
| 归档时间: |
|
| 查看次数: |
151158 次 |
| 最近记录: |