我正在使用我必须升级的网站(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哈希值,但这不是我的目标。它只是改变加密方法。此外,暴力行为似乎效率低下,因为词典不太可能有词汇的散列......
这样做是否有缺陷?
答案 0 :(得分:3)
密码的简单散列是不够的,它受到彩虹表的限制并且要快速。
而是在PHP中使用Safe Password Hashing:password_hash()
和password_verify()
或类似的功能,如PBKDF2,Bcrypt或脚本。这些功能更加安全,因为有两个附加功能:重复计数和随机盐。这都是关于提高攻击者必须执行的工作因素。
毕竟,关键是拥有一个安全的系统。只是让攻击者更加不方便不是答案,那里有黑客程序可以利用糟糕的密码安全性。