Does SecureRandom guarantee distinct values each time?
我需要生成加密安全、随机和唯一的字符串,每个字符串实际上都将用作访问令牌。为此,我计划使用Java的EDCOX1×0类。但是,我不确定SecureRandom是否保证了唯一性。换句话说,SecureRandom是否在每次生成时都产生不同的值?
似乎创建具有
如果你有SecureRandom以外的建议,我也想听听。
不,
设置种子值并不能改善这种情况。它也不会使情况变得更糟,因为您传递的种子是添加(补充)由
如果要保证唯一随机数,则需要保留所有以前生成的数字,然后检查生成新数字的时间(如果已返回)。如果有,您需要生成一个新号码(并重复检查)。
但是,如果您生成的数字很大,则生成非唯一数字的机会将变得非常小。尝试生成256位或更多(32字节)的数字。这也是UUID用来生成"唯一"数字的机制。这些也不能保证是唯一的,但你必须等待很长的时间(平均)才能得到一个副本。