Math 大数域上的Generete唯一随机数

Math 大数域上的Generete唯一随机数,math,random,Math,Random,我想问的是,是否存在一种无需辅助结构就能生成唯一随机数的方法 我的意思是,如果已经存在一些数学函数(或算法),它们只会在一个字段上一次生成随机数(我不会尝试为这个问题编写某种特定的哈希函数) 这是因为我会生成许多在0和10.000.000.000(大约60%的字段)之间选择的唯一数字(整数),因此随机重复并非不可能,并且将先前生成的数字存储在结构中以供后续查找(即使优化良好,如位阵列),可能会太昂贵(空间和时间上) 附言 (请注意,当我写random时,我实际上是指伪随机)如果要确保唯一性,请不

我想问的是,是否存在一种无需辅助结构就能生成唯一随机数的方法

我的意思是,如果已经存在一些数学函数(或算法),它们只会在一个字段上一次生成随机数(我不会尝试为这个问题编写某种特定的哈希函数)

这是因为我会生成许多在0和10.000.000.000(大约60%的字段)之间选择的唯一数字(整数),因此随机重复并非不可能,并且将先前生成的数字存储在结构中以供后续查找(即使优化良好,如位阵列),可能会太昂贵(空间和时间上)

附言


(请注意,当我写random时,我实际上是指伪随机)

如果要确保唯一性,请不要使用哈希函数,而是使用加密函数来加密数字0、1、2、3。。。由于加密是可逆的,因此每个数字(直到块大小)都是唯一加密的,并将产生唯一的结果

您可以编写具有方便的块大小的简单Feistel密码,也可以使用允许大范围块大小的Hasty Pudding密码。每当一个输入号码生成的输出太大时,就转到下一个输入号码


更改密码的键将生成一系列不同的输出数字。只要记住键并从0、1、2开始,就可以在需要时重新生成相同的数字序列。。。不需要存储整个序列。正如您所说,序列是伪随机的,因此如果您知道密钥,可以很容易地重新生成。

如果您想确保唯一性,请不要使用哈希函数,而是使用加密函数来加密数字0、1、2、3。。。由于加密是可逆的,因此每个数字(直到块大小)都是唯一加密的,并将产生唯一的结果

您可以编写具有方便的块大小的简单Feistel密码,也可以使用允许大范围块大小的Hasty Pudding密码。每当一个输入号码生成的输出太大时,就转到下一个输入号码


更改密码的键将生成一系列不同的输出数字。只要记住键并从0、1、2开始,就可以在需要时重新生成相同的数字序列。。。不需要存储整个序列。正如您所说,序列是伪随机的,因此如果您知道密钥,就可以很容易地重新生成。

您可以尝试所谓的准随机数,而不是伪随机数,它更准确地称为低差异序列。[1]


[1] 您可以尝试所谓的准随机数,而不是伪随机数,后者更准确地称为低差异序列。[1]


[1]

很好的解决方案。同时我也发现了这个关于二次型的链接。您认为链接中的解决方案是否比使用加密更快?与您的解决方案相比,还可以提供可接受的随机性?我以前并没有提到过,但生成速度是一个关键点。你们永远无法提前知道速度。写一个解决方案,看看它是否足够快。只有当第一个想法太慢时才尝试第二个想法。仓促的布丁将比简单的(因此不安全的)Feistel密码慢,只有四个回合(甚至更不安全)。我已经使用Java AES CTR测试了这个解决方案(以实现一个字节的分辨率),对于小集(8位),它完全不是随机的。对于中等集,结果更好,但加密仍然是一个单调函数。我已经使用Java AES CTR测试了这个解决方案(以实现一个字节的分辨率),对于小集(8位),它完全不是随机的。对于中等集,结果更好,但加密仍然是一个单调的函数。实现结果8b结果16b(很抱歉,我无法编辑以前截断的注释)CTR模式可能不是一个好的选择。最好使用ECB,因为您对密码的置换属性比对密码属性更感兴趣。每个数字都是一个块,使用ECB加密到不同的唯一块。很好的解决方案。同时我也发现了这个关于二次型的链接。您认为链接中的解决方案是否比使用加密更快?与您的解决方案相比,还可以提供可接受的随机性?我以前并没有提到过,但生成速度是一个关键点。你们永远无法提前知道速度。写一个解决方案,看看它是否足够快。只有当第一个想法太慢时才尝试第二个想法。仓促的布丁将比简单的(因此不安全的)Feistel密码慢,只有四个回合(甚至更不安全)。我已经使用Java AES CTR测试了这个解决方案(以实现一个字节的分辨率),对于小集(8位),它完全不是随机的。对于中等集,结果更好,但加密仍然是一个单调函数。我已经使用Java AES CTR测试了这个解决方案(以实现一个字节的分辨率),对于小集(8位),它完全不是随机的。对于中等集,结果更好,但加密仍然是一个单调的函数。实现结果8b结果16b(很抱歉,我无法编辑以前截断的注释)CTR模式可能不是一个好的选择。最好使用ECB,因为您对密码的置换属性比对密码属性更感兴趣。每个数字都是一个块,使用ECB加密为不同的唯一块。对不起,我不知道它们(我读过维基百科和其他一些来源,但我仍然不知道如何使用它们)。你能给我举个例子,解释一下我如何用这些技术在一个n位的字段上生成一个保证的唯一数字吗?对不起,我不知道它们(我读过维基百科和其他一些资料,但我仍然不知道如何使用它们)。你能给我举个例子,说明我如何生成