基于15种子的随机公式

时间:2018-03-16 10:40:04

标签: c algorithm math electronics

我正在攻读大学学位,我被困在一个随机函数中。 我正在使用没有配置时钟的微控制器。所以,我决定使用ADC(模数转换)作为随机函数的种子。

所以我有15个两个字节的变量,存储一些“随机”值(转换并不总是相同,差别在LSB(在我的情况下的最后一位:例如,现在adc读取的值是700,在5ms,它是701,然后回到700,然后是702等。所以,我正在考虑建立一个随机函数,使用最后4位从这些变量中说出来。

我的问题是:你能给我一个好的随机公式的例子吗?

( Variable1 >> 4 ) ^ ( Variable2 << 4 )等等......

我希望能够在1个字节上获得一个相当随机的数字(这是最好的情况)。它将用于我已经实现的RSA算法(我有一个带素数的大查找表,我需要该表中的2个随机数)。

2 个答案:

答案 0 :(得分:1)

如果您认为每个字的LS位是真正随机的(很可能是),并且如果它们不相关,则将8个LS位打包成1个字节。剩下的15 x 16 - 8位没有用。

答案 1 :(得分:1)

通常使用SHA或MD5等加密哈希函数来实现此目的。只要您的输入数据包含足够的熵,您将获得随机输出。见https://en.wikipedia.org/wiki/Entropy_(computing)

但是,对于您的用例来说,这可能有点太多了。如果您只需要8位,则可以使用8位循环冗余码(CRC)。它将具有类似的属性 - 因为任何8个输入位都可用于完全确定输出,只要输入位中至少有8位是随机的,输出就是随机的。见http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html

那会做你要求的......但要小心!听起来你正在编写一个完全不安全的RSA实现。在任何情况下,您都不能仅使用8位随机性来安全地生成RSA密钥。