std::rand()
не дает достаточных гарантий для использования в криптографических приложениях (иначе говоря, безопасное случайное число):
Нет никаких гарантий относительно качества случайного числапоследовательность произведена.В прошлом некоторые реализации rand () имели серьезные недостатки в случайности, распределении и периоде создаваемой последовательности (в одном хорошо известном примере бит младшего разряда просто чередовался между 1 и 0 между вызовами).
Вы можете получить более качественную случайную генерацию, используя библиотеку <random>
.Но опять же, используемые генераторы, такие как, например, mersene twister , недостаточны для криптографического использования.
Так что вам лучше пойти на специализированные библиотеки, такие как OpenSSL .
В качестве альтернативы, если выбрать платформу, вы можете использовать Windows API с CryptGenRandom()
или, что лучше, с более новым BCryptGenRandom()
.