0

我想知道是否有人可以给我一些建议吗?我想知道以下代码用于使用 Codeigniter 加密密码有多安全/不安全或其他垃圾?

$safe_password = sha1($password, $config['encryption_key'])

如果不安全,人们可以给我一些提示以使其使用 Codeigniter 更安全吗?

非常感谢 :)

4

5 回答 5

2

众所周知,sha1 容易受到碰撞攻击,请尝试使用 bcrypt,因为它是最好的之一。如果 bcrypt 对您不起作用,请使用 sha512 并添加盐。
bcrypt 可能看起来令人生畏,但这里有一篇关于为什么你应该使用它的文章:http: //phpmaster.com/why-you-should-use-bcrypt-to-hash-stored-passwords/

sha1 不安全的原因是因为碰撞攻击,这里是暴露 sha1 安全风险的论文之一:http ://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html

如果您想使用 sha512,您需要做的就是:

hash('sha512', $password.$salt);

并确保您始终使用盐,否则有人可以使用彩虹表(数据库)来查看您的哈希是否与数据库中的通用密码匹配。

于 2013-02-04T17:25:11.293 回答
0

更好的解决方案是使用 bcrypt,看看这个教程

这是一个可以与 Codeigniter 一起使用的小型库https://github.com/waldirbertazzijr/codeigniter-bcrypt

另一个相关的问题

于 2013-02-04T17:25:40.210 回答
0

sha1 和 md5 等散列算法不适用于密码存储。它们的设计非常高效。这意味着暴力破解非常快。即使黑客获得了您散列密码的副本,暴力破解也很快。如果您使用盐,它会使彩虹表的效果降低,但对蛮力没有任何作用。使用较慢的算法会使蛮力无效。例如,bcrypt 算法可以随心所欲地变慢,并且它在内部使用盐来防止彩虹表。如果我是你,我会采用这种方法或类似方法。

于 2013-02-04T17:26:00.333 回答
0

来自 PHP 文档

string sha1 ( string $str [, bool $raw_output = false ] ) 如果可选raw_output 设置为 TRUE,则​​ sha1 摘要以长度为 20 的原始二进制格式返回,否则返回值为 40 个字符十六进制数。

我的建议使用BCRYPT它更安全以便于实施,您可以尝试password_compat

例子

$hash = password_hash($password, PASSWORD_BCRYPT);
于 2013-02-04T17:27:05.137 回答
0

不,sha1()不被认为是安全的,例如在这里: http ://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

目前,一个不错的选择可能是使用盐的 SHA512:hash('sha512', 'text+salt')

于 2013-02-04T17:27:55.000 回答