我正在开发一个应用程序,使现有用户能够通过电子邮件邀请他们的朋友。在邀请过程中,我生成了一个代码,用于被邀请的人点击注册的链接。
目前我正在使用从他们的电子邮件字符串生成的默认哈希码,然而这可能是相当明显和不安全的。
我正在考虑使用这个:
Random random = new Random();
Integer code = random.nextInt()
但是我的Random
实例需要在我的整个应用程序中是一个单例吗?每次app/jvm重新启动时,它将被"重置",从而可能产生两次相同数量的碰撞?
编辑实际上默认的哈希码并没有那么糟糕,攻击者需要知道有人被邀请了,他们的电子邮件是什么,并尝试在正确的时间范围内生成链接(邀请是有效的)。
您可以在电子邮件地址中添加(当前)日期/时间字符串,以使其唯一
散列算法不能保证唯一的散列,但您可以做的是提供唯一的输入。尝试将电子邮件与盐值或类似的东西结合起来。这样可以保证哈希值是唯一的。