我正在开发一款应用,让现有用户可以通过电子邮件邀请他们的朋友。在邀请过程中,我生成一个代码,用于受邀人员点击注册的链接。
目前我正在使用从他们的电子邮件字符串生成的默认哈希码,但这可能非常明显且不安全。
我正在考虑使用它:
Random random = new Random();
Integer code = random.nextInt()
但我的Random
实例需要在整个应用中成为单身人士吗?每次app / jvm重新启动时,它都会被“重置”,从而使得可能产生两次相同数字的collisons?
编辑实际上,默认的哈希码并不是那么糟糕,攻击者需要知道某人已被邀请以及他们的电子邮件是什么,并尝试在正确的时间范围内生成链接(邀请是活跃的。)
答案 0 :(得分:3)
您可以将(当前)日期/时间字符串附加到电子邮件地址,以使其唯一。
答案 1 :(得分:1)
散列算法不能保证唯一的散列,但您可以做的是提供一个唯一的输入。尝试将电子邮件与盐值或类似的东西结合起来。这样就可以保证散列是唯一的。