将 sha512 转换为 md5

Convert sha512 to md5

在 Multicraft 面板中使用 SHA512 作为加密(您可以更改 MD5 的设置),但我需要使用相同数据库的旧版本。这个旧版本没有使用 SHA512 加密的选项,只能使用 MD5。因此,所有密码都是无效的 MD5.

是否可以将 MySQL 数据库中的所有 SHA512 密码转换为 MD5?

SHA512 和 MD5 是 hashes,不是加密算法。按照设计,它们是不可逆的。

转换这些值的唯一方法是等待每个用户登录,根据现有的 SHA512 哈希验证他们的密码,然后使用 MD5 重新哈希¹他们的输入。这与密码哈希更新为更安全标准的方式相反。

但是请,不要这样做。 MD5 is hopelessly broken。从 SHA512 恢复到 MD5 会给您的用户带来巨大的伤害。想办法使用更新版本的软件。


¹正如 zaph 在评论中指出的那样,"rehashing" 过于简单化,并且根据您的面板的实际实施方式,它今天可能使用不安全的密码存储。

要提供合理的安全性,每个密码还必须具有唯一的随机性 salt (which protects against things like rainbow tables) and each hash must be iterated enough times to make brute forcing 不切实际。随着计算机变得越来越强大,迭代次数必须增加。今天迭代几万、几十万次是很常见的。

密码学 令人震惊 难以正确理解。与其尝试手动遵循所有最佳实践,不如使用在正确的抽象级别运行并经过安全审计的库和函数。像 bcrypt (via PHP's built-in password_hash 函数这样的算法,目前是默认算法)将是一个不错的选择。

简答:否

长答案:

根据设计,MD5 和 SHA512 都是 单向 哈希。为了将 SHA512 转换为 MD5,您需要知道 both 您尝试转换的每个密码的原始密码,以及 also 盐那是用来加密它们的。您几乎肯定不会知道每个用户的每个密码。

单向哈希的工作原理是在用户每次登录时实际使用相同的算法。用户输入他们的密码,该算法将应用于它,如果它与数据库中已经存在的副本完全匹配被散列,然后用户登录。您不能使用任何类型的算法来计算原始密码是什么,只能比较应用特定密码的输出是否与已经加密的密码。

MD5 也是一种比 SHA512 的散列算法。转换为 MD5 会使您的密码 far 不那么安全,而这可能是您不想做的事情。相反,您应该寻找一种方法来合并新的数据库系统。