我有一个类似整数的数据库,因为它们都共享相同的前3个数字:
7537463746
7536735325
7538236775
7538273826
...
每个人都与用户相关联,并且他们几乎都暴露给公众,这意味着他们作为一种对等发现被发送,但不是直接共享。我不希望可以访问裸整数,因此我考虑使用单向哈希函数对其进行哈希处理,如MD5。
由于输出不像加密或压缩算法那样可逆,所以它看起来很棒。但这是一个问题;获取整数数据库很容易且不可避免,因此循环遍历它们,散列循环结果并将所有散列与通过对等通信发送的散列进行比较对于恶意用户来说将是一项微不足道的工作。
架构是这样的:
user1[hash(integer1),hash(integer2)...] -> |server hash database| ->
↓
↓
hash(integer1) = user8
hash(integer2) = user40
恶意用户将通过社交工程或其他方式获取user1整数数据,并通过将所有数据添加到他的对等数据中来查看他们是否在数据库中。
现在,有没有任何哈希算法来避免这种情况?我需要对等体进行通信而不给出它们的整数数据,但仍然将相同的整数相互关联到唯一的散列。另外,关键签约是唯一的解决方案吗?我想避免它,因为它会使整个系统变慢。
答案 0 :(得分:0)
您是否考虑过腌制MD5?这意味着你有一些只有你的应用才知道的秘密密钥。这实际上总是一种很好的做法。所以不要这样做......
md5($userId)
你会像这样在MD5中追加“盐”...
md5($userId . 'this is a secret shhh!')
现在他们无法从MD5中获取整数。