对于给定的密钥,什么样的随机数生成系统会只返回一个结果

本文关键字:返回 结果 一个 系统 密钥 随机数 什么样 | 更新日期: 2023-09-27 18:25:38

我正在寻找一个crossplarform标准随机数生成器,它在用种子初始化后,总是为给定的整数键返回相同的随机数。

在不生成任何类型的键/值映射的情况下,内存节约在这一点上比处理器使用更重要。

假设我们用种子初始化生成器(这不是关键)。

然后我们可以检索任意键的结果。对于同一个键,每次调用都将始终返回相同的结果。

例如:

KeyBasedRandomGenerator r1 = new KeyBasedRandomGenerator(MY_SEED);
KeyBasedRandomGenerator r2 = new KeyBasedRandomGenerator(MY_SEED);
int test = r1.Get(500);
for (int key = 0; key < 10000000; ++key)
{
    assert ( r1.Get(key) == r2.Get(key));
}
assert ( r1.Get(500) == test);

是否有适用于C#和C++的实现?它们叫什么?

有没有可能找到在一个范围内总是返回相同结果的变化:

    assert ( r.Get(key, 0, 15) == r.Get(key, 0, 15));

编辑:我了解哈希的作用以及通常的随机生成器是如何工作的。我正在寻找的是一个标准化的随机数生成器函数或实现(库),它与密钥一起工作。

如果这个场景中没有比"哈希函数"更具体的术语,那么它就是哈希函数。

对于给定的密钥,什么样的随机数生成系统会只返回一个结果

它们被称为"哈希函数"。钥匙不一定只有一个数字。它可以是任何数据块。散列函数对某个任意输入执行复杂的逐位计算,并生成一个用于输出的值。出于所有实际目的,生成的哈希值将显示为随机值。

LCG,对于给定的空间(例如,64位)具有一组好的参数,将为给定的输入/状态产生相同的RN。

基本上,LCG会将任何64位值唯一地映射到另一个64位值中。

此外,比如说,像AES这样的体面密码将完全做到这一点——给定输入密钥,它将把它映射到输出值(比如,128bit->128bit)

链接:http://www.atmel.com/zh/cn/Images/article_random_number.pdf

我不知道这些类随机函数的名称,但我相信Mersenne Twister(通常为MT19937)应该保证无论平台或实现都能获得相同的结果。

一般来说,不能保证任何给定的哈希或随机函数在不同的平台上都会返回相同的结果。这似乎是所讨论的算法的一个实现细节。

当我读到这个问题时,我认为他问的不是散列函数,而是PRNG。(我可能错了。)

伪随机数生成器——大多数计算机RNG都是PRNG——基于"种子"生成固定的数字序列。

所有的C和C++RNG(除了一个)都是PRNG。

请参阅<随机>文档。

.Net Random类有一个接受种子的构造函数。对于给定的种子(您称之为"给定的整数键"),您应该得到相同的"随机"数作为回报。这样一来,它就像一个散列。

    int seed = 101;
    Random r = new Random(seed);  //use same seed
    int rInt = r.Next(0, 100);    //can specify a range
    Console.WriteLine(rInt);

参考:https://msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx#相同