簡體   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