将加密密码从MD5转换为SHA-256,我的协议有缺陷吗?

时间:2016-03-13 13:17:45

标签: md5 sha256 password-encryption

我正在使用我必须升级的网站(PHP + MySQL)。密码存储在MD5的数据库中,我希望它更安全,比如SHA-256。

我已经红了this question关于"转换"密码哈希,但我有另一个想法,我想知道它是否带来安全问题。

目前,通过散列(在MD5中)给定密码在php中检查密码,并将其与存储在数据库中的散列进行比较,if(md5($password) == $hash)

假设我在SHA-256中散列所有MD5哈希值。我有一个md5哈希的sha-256哈希。

旁注:我知道重新散列哈希值并不安全,这不是我的问题

当用户想要连接时,我只需要更改md5($pass)中的hash('sha256', md5($password), false)以使其与存储在数据库中的值相匹配(假设$ password是正确的)< / p>

对我来说这似乎是一个好主意,因为我不需要在转换后跟踪md5哈希值,因为我不需要在表格中创建任何新列。我知道这不会给我使用md5哈希存储的原始密码的SHA-256哈希值,但这不是我的目标。它只是改变加密方法。此外,暴力行为似乎效率低下,因为词典不太可能有词汇的散列......

这样做是否有缺陷?

1 个答案:

答案 0 :(得分:3)

密码的简单散列是不够的,它受到彩虹表的限制并且要快速。

而是在PHP中使用Safe Password Hashingpassword_hash()password_verify()或类似的功能,如PBKDF2,Bcrypt或脚本。这些功能更加安全,因为有两个附加功能:重复计数和随机盐。这都是关于提高攻击者必须执行的工作因素。

毕竟,关键是拥有一个安全的系统。只是让攻击者更加不方便不是答案,那里有黑客程序可以利用糟糕的密码安全性。