gpt4 book ai didi

java - 在 PRNG 中使用种子

转载 作者:行者123 更新时间:2023-12-01 04:49:07 26 4
gpt4 key购买 nike

在Java中,我使用“SHA1PNRG”生成伪随机数。我不知道这个数字生成的内部工作原理。什么种子值最适合安全数字生成?我应该使用较小的数字作为种子还是较大的值作为种子?请各位给予正确指导。

我的代码:

SecureRandom sr= SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);

我使用sr.nextInt(int)来获取下一个值,seed是一个长数据类型变量。

最佳答案

NIST SP800-90A当使用基于 SHA-1 的 Hash_DRBG(确定性随机位生成器)时,建议种子长度为 440 位(即 55 字节)。 (该算法也在那里描述)。

但这不仅与种子的长度有关,还与它的熵(“随机性”)有关。如果用 440 位的零字符串初始化 DRBG,那么尽管它很长,但这将是一个糟糕的选择。

播种的目的是配置生成器的初始状态,以便攻击者无法预测随机数的序列。请记住,所有过程都是确定性的,那么一旦任何人知道生成器的状态,他就能够从该点开始重现随机序列。

您可以使用SecureRandom.generateSeed方法计算种子,该方法依赖于当前操作系统提供的熵源(例如,SeedGenerator of OpenJDK在Linux上使用/dev/random, Windows 上的 MS CryptoAPI)。

 SecureRandom sr= SecureRandom.getInstance("SHA1PRNG");     
byte seed[] = random.generateSeed(55);
sr.setSeed(seed);

关于java - 在 PRNG 中使用种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15307127/

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