我正在生成一个令牌,以便在单击验证电子邮件中的链接时使用。我计划使用uniqid()但输出将是可预测的,允许攻击者绕过确认电子邮件。我的解决方案是散列它。但这还不够,因为如果我使用的哈希被发现,那么它仍然是可预测的。解决办法是加盐。我不知道该怎么做,因为如果我使用函数来提供变量盐(例如在伪代码中hash(uniqid()+time())),那么哈希的唯一性是否不再得到保证?我应该使用一个常量散列,这样就足够了(例如hash(uniqid()+asd741))
我认为所有答案都遗漏了重要的一点。它必须是独一无二的。如果openssl_random_pseudo_bytes()两次产生相同的数字怎么办?然后一位用户将无法激活他的帐户。人们的反驳论点是它不可能两次产生相同的数字吗?这就是我考虑的uniqid()原因,因为它的输出是独一无二的。
我想我可以同时使用它们并将它们附加在一起。