当输入为 public 时,是否有替代 MD5 哈希的方法?
Is there an alternative to MD5 hashing when the input is public?
我有一个类似整数的数据库,因为它们都共享相同的前 3 个数字:
7537463746
7536735325
7538236775
7538273826
...
每个都与一个用户相关联,并且它们几乎都暴露给 public,这意味着它们作为一种对等发现发送,但不直接共享。我不希望可以访问裸整数,所以我考虑使用 单向 哈希函数对它们进行哈希处理,例如 MD5.
由于输出像加密或压缩算法那样不可逆,因此看起来很棒。但是有一个问题;获取整数数据库既简单又不可避免,因此遍历它们、对循环结果进行哈希处理并将所有哈希值与通过对等通信发送的哈希值进行比较对于恶意用户来说将是一项微不足道的工作。
架构是这样的:
user1[hash(integer1),hash(integer2)...] -> |server hash database| ->
↓
↓
hash(integer1) = user8
hash(integer2) = user40
恶意用户将通过社会工程或其他方式获取 user1 整数数据,并通过将它们添加到他的对等数据来散列所有这些数据以查看它们是否在数据库中。
请问有什么哈希算法可以避免这种情况吗?我需要对等方在不提供整数数据的情况下进行通信,但仍然相互将相同的整数关联到唯一的哈希值。或者,密钥签名是唯一的解决方案吗?我想避免它,因为它会使整个系统变慢。
您是否考虑过为您的 MD5 加盐?这意味着您拥有某种只有您的应用程序知道的秘密密钥。这实际上始终是一个好习惯。所以与其这样做...
md5($userId)
您可以像这样在 MD5 中附加 "salt"...
md5($userId . 'this is a secret shhh!')
现在他们无法从 MD5 中获取整数。
我有一个类似整数的数据库,因为它们都共享相同的前 3 个数字:
7537463746
7536735325
7538236775
7538273826
...
每个都与一个用户相关联,并且它们几乎都暴露给 public,这意味着它们作为一种对等发现发送,但不直接共享。我不希望可以访问裸整数,所以我考虑使用 单向 哈希函数对它们进行哈希处理,例如 MD5.
由于输出像加密或压缩算法那样不可逆,因此看起来很棒。但是有一个问题;获取整数数据库既简单又不可避免,因此遍历它们、对循环结果进行哈希处理并将所有哈希值与通过对等通信发送的哈希值进行比较对于恶意用户来说将是一项微不足道的工作。
架构是这样的:
user1[hash(integer1),hash(integer2)...] -> |server hash database| ->
↓
↓
hash(integer1) = user8
hash(integer2) = user40
恶意用户将通过社会工程或其他方式获取 user1 整数数据,并通过将它们添加到他的对等数据来散列所有这些数据以查看它们是否在数据库中。
请问有什么哈希算法可以避免这种情况吗?我需要对等方在不提供整数数据的情况下进行通信,但仍然相互将相同的整数关联到唯一的哈希值。或者,密钥签名是唯一的解决方案吗?我想避免它,因为它会使整个系统变慢。
您是否考虑过为您的 MD5 加盐?这意味着您拥有某种只有您的应用程序知道的秘密密钥。这实际上始终是一个好习惯。所以与其这样做...
md5($userId)
您可以像这样在 MD5 中附加 "salt"...
md5($userId . 'this is a secret shhh!')
现在他们无法从 MD5 中获取整数。