c - 基于15个种子的随机公式



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

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

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

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

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

通常使用像 SHA 或 MD5 这样的加密哈希函数来实现此目的。 只要您的输入数据包含足够的熵,您就会得到随机输出。 参见 https://en.wikipedia.org/wiki/Entropy_(计算(

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

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

如果您认为每个单词的 LS 位确实是随机的(这很可能(,并且如果它们不相关,请将 8 个 LS 位打包到 1 个字节中。其余 15 x 16 - 8 位没有用。

最新更新