我正在攻读大学学位,我被困在一个随机函数中。 我正在使用没有配置时钟的微控制器。所以,我决定使用ADC(模数转换)作为随机函数的种子。
所以我有15个两个字节的变量,存储一些“随机”值(转换并不总是相同,差别在LSB(在我的情况下的最后一位:例如,现在adc读取的值是700,在5ms,它是701,然后回到700,然后是702等。所以,我正在考虑建立一个随机函数,使用最后4位从这些变量中说出来。
我的问题是:你能给我一个好的随机公式的例子吗?
赞( Variable1 >> 4 ) ^ ( Variable2 << 4 )
等等......
我希望能够在1个字节上获得一个相当随机的数字(这是最好的情况)。它将用于我已经实现的RSA算法(我有一个带素数的大查找表,我需要该表中的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密钥。