Php 加密这样的密码安全吗?

Php 加密这样的密码安全吗?,php,security,codeigniter,Php,Security,Codeigniter,我想知道是否有人能给我一些建议?我想知道下面使用Codeigniter加密密码的代码有多安全/不安全或垃圾 $safe_password = sha1($password, $config['encryption_key']) 如果不安全,人们可以给我一些提示,使其更安全使用Codeigniter请 非常感谢:)众所周知,sha1容易受到碰撞攻击,请尝试使用bcrypt,因为它是最好的工具之一。如果bcrypt不适合您,请使用sha512并添加盐。 使用bcrypt可能会让人望而生畏,但以下是

我想知道是否有人能给我一些建议?我想知道下面使用Codeigniter加密密码的代码有多安全/不安全或垃圾

$safe_password = sha1($password, $config['encryption_key'])
如果不安全,人们可以给我一些提示,使其更安全使用Codeigniter请


非常感谢:)

众所周知,sha1容易受到碰撞攻击,请尝试使用bcrypt,因为它是最好的工具之一。如果bcrypt不适合您,请使用sha512并添加盐。
使用bcrypt可能会让人望而生畏,但以下是一篇关于为什么要使用它的文章:

sha1之所以不安全是因为碰撞攻击,以下是其中一篇揭露sha1安全风险的文章:

如果您想使用sha512,只需执行以下操作:

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

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

更好的解决方案是使用bcrypt,请看一看

这里有一个小的库,可以与Codeigniter一起使用


另一个相关的。

散列算法,如sha1和md5,不适合存储密码。它们的设计非常高效。这意味着暴力强迫的速度非常快。即使黑客获得了你的散列密码副本,也可以很快地对其进行暴力攻击。如果你使用盐,它会降低彩虹桌子的效果,但对暴力没有任何作用。使用较慢的算法会使暴力无效。例如,bcrypt算法可以按照您的意愿进行慢处理,并且它在内部使用盐来防止彩虹表。如果我是你,我会采用这种方法或类似方法。

来自PHP文档

字符串sha1(字符串$str[,bool$raw\u output=false]) 如果可选的原始\u输出设置为TRUE,则sha1摘要将以原始二进制格式返回,长度为20,否则返回值为40个字符的十六进制数

我的建议是使用
BCRYPT
它更安全,易于实现,您可以尝试

范例

$hash = password_hash($password, PASSWORD_BCRYPT);
不,
sha1()
不被认为是安全的,因为可以读取,例如,在这里:


目前,一个好的选择可能是使用salt的SHA512:
散列('SHA512','text+salt')

,因为sha1函数返回的时间更长,因此散列更安全。此外,hash()没有加密密钥,因此在不同的域上会有相同的哈希密钥。如果你不是特别避免像Ion Auth这样的模块,为什么不使用类似的模块呢?PHP文档中关于哈希密码的更多信息:可能重复-因为其他人都发布了通用(即无codeigniter)答案:SHA-1仍然对病毒有抵抗力。