首页 > 解决方案 > 你如何改变mysql中的哈希算法?

问题描述

我刚刚注意到一些我以前没有注意到的关于 MySql 的东西。

如果您使用任何 MySql 散列函数 MD5、SHAx、Password 等,它们似乎都返回相同的散列。这发生在所有模式和数据库中,无论它们安装的实例如何

我有一个本地 MySql 服务器数据库,另外两个由不同的互联网提供商托管

如果我执行以下操作

  select MD5('Password');
  select Sha1('Password');
  select Sha2('Password', 224);
  select Password('Password');

每个函数将在所有 MySql 实例中为该函数产生相同的结果

例如,如果我这样做select MD5('Password'),它会为 MD5 提供相同dc647eb............12b3964 的哈希值,而不管在我的所有服务器上。这在我看来有点可疑,听起来像是一个安全漏洞。

有没有人注意到这一点,有什么可以做的吗?

标签: mysqlsecurity

解决方案


MD5、SHA1 和 SHA2 是简单的加密哈希,对于任何给定的输入,按照设计,它们都会产生完全相同的输出。这就是它们的用途。您不希望每次运行散列时都出现不同的 SHA2 文件签名。它们还旨在快速计算。

您希望SHA2(x)始终为任何给定生成相同的输出,x这样如果您有一个文件和一个签名,您可以通过计算哈希并比较它来查看该文件是否以任何方式被篡改。

您可能会想到的密码特定散列(例如Bcrypt )以不同的方式工作并产生随机输出。这使他们更能抵抗暴力密码猜测攻击。它们的设计速度也很慢,通常比它们的 MD5 或 SHA 慢几千万倍,甚至几百万倍。

您希望有效地BCRYPT(x)对任何给定随机x且不可预测,因此您无法x从输出中推断。

是的,使用 MD5 或 SHA 作为密码是一个巨大的安全问题,尤其是在输入未加盐的情况下。只需dc647eb65e6711e155375218212b3964在您最喜欢的搜索引擎中搜索,看看会出现什么:它会立即“去散列”。您可以将搜索引擎用作以前称为Rainbow Table的东西。

SHA 和 MD5 被广泛用于散列密码,主要是因为它是当时的最佳选择。计算机的速度也慢得多,而且不存在 GPU 选项,因此妥协的风险大大降低。现在存在像Hashcat这样的工具,如果有人粗心使用弱散列,甚至可以破解“困难”的密码。


推荐阅读