Как я могу улучшить свой код для генерации безопасных случайных чисел? - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь выяснить, каков наилучший способ или библиотека для генерации безопасных случайных чисел, таких как secrets в python.

Я работаю на Windows 10, используя кодовые блоки.Я сделал это до сих пор:

#include <cstdlib> 
#include <ctime> 
#include <iostream>

using namespace std;

int main() 
{ 
    srand((unsigned)time(0)); 
    int i;
    i = (rand()%6)+1; 
    cout << i << "\n"; 
}

Я пытаюсь повторить ту же функцию, что и secrets из python, чтобы генерировать безопасные случайные числа.

1 Ответ

0 голосов
/ 15 февраля 2019

std::rand() не дает достаточных гарантий для использования в криптографических приложениях (иначе говоря, безопасное случайное число):

Нет никаких гарантий относительно качества случайного числапоследовательность произведена.В прошлом некоторые реализации rand () имели серьезные недостатки в случайности, распределении и периоде создаваемой последовательности (в одном хорошо известном примере бит младшего разряда просто чередовался между 1 и 0 между вызовами).

Вы можете получить более качественную случайную генерацию, используя библиотеку <random>.Но опять же, используемые генераторы, такие как, например, mersene twister , недостаточны для криптографического использования.

Так что вам лучше пойти на специализированные библиотеки, такие как OpenSSL .

В качестве альтернативы, если выбрать платформу, вы можете использовать Windows API с CryptGenRandom() или, что лучше, с более новым BCryptGenRandom().

...