繁体   English   中英

在 C++ 中重复生成相同随机数的有效方法?

[英]Efficient way to repeatedly generate same random number in C++?

我正在研究安全的 LoRa 传输,我需要根据输入计数器在发射器和接收器上生成相同的伪随机数(这将是加密算法的一部分)。 所以对于给定的输入,这个 function 应该给出相同的 output,就像哈希算法一样。

作为一个例子,这就是我的意思,但正如您所看到的,计算会根据输入而变长:

unsigned int f(unsigned int input) {
  srand(1234);
  for (unsigned int i = 0; i < input; i++) {
    rand();
  }
  return rand();
}

有没有更有效的方法来做到这一点? 我在 ESP32 微控制器上。

编辑。 感谢所有的答案。 我本来可以用 CRC function 完成我想做的事情,但根据你的建议,我最终放弃了这种方法,转而使用标准加密算法。

您不应将rand用于此目的,因为它是实现定义的,这会为您的用例带来几个问题:

  • 它可能会在不同的目标上产生不同的数字
  • 不保证加密安全

你所描述的是一个密码 hash function。有许多图书馆提供这些。 通常需要在安全性和性能之间进行权衡,因此您必须使用 select 之一。

它将是加密算法的一部分

如果应用程序必须真正安全,我会建议使用现有的算法,如AES ,而不是尝试编写自己的算法,就像您在此处尝试做的那样。 同样,这些可以作为库使用,其中一些很小并且适用于嵌入式系统,例如tiny-AES

今天出现了一个很好的问题,提出了随机生成的标准函数: 获取随机数分布的 state(种子)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM