gpt4 book ai didi

java - SecureRandom 是否保证每次都有不同的值?

转载 作者:行者123 更新时间:2023-12-01 07:05:22 25 4
gpt4 key购买 nike

我需要生成加密的安全随机唯一字符串,每个字符串都将用作实际上是访问 token 。为此,我计划使用 Java 的 SecureRandom 类。但是,我不确定 SecureRandom 能否保证唯一性。换句话说,SecureRandom 是否在每次生成时都会产生不同的值?

看起来使用 seed 值创建实例(即 new SecureRandom(byte[] Seed))可能有效。但是,我不确定这一点。而且,这个answer指出种子既不安全也不便携。种子值(value)是否符合我的目的?

如果您除了 SecureRandom 之外还有其他建议,我也想听听。

最佳答案

不,SecureRandom 实例不能保证唯一的结果。如果它确实保证了这一点,那么它就不会完全随机,因为您会知道您无法获得已经收到的结果。

设置种子值并不能改善这种情况。它还不会让情况变得更糟,因为您传递的种子会添加(补充)由 SecureRandom 实现内部生成的种子。

如果你想要保证唯一的随机数,你需要保留所有以前生成的数字,然后在生成新数字时检查它是否已经返回。如果有,您需要生成一个新号码(并重复检查)。

但是,如果您生成的数字非常大,则生成非唯一数字的机会就会变得微不足道。尝试生成 256 位或更多(32 字节)的数字。这也是 UUID 用于生成“唯一”数字的机制。这些也不能保证是唯一的,但是您必须等待非常非常长的时间(平均而言)才能获得重复项。

关于java - SecureRandom 是否保证每次都有不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26527609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com