Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Membenihkan Mt19937 PRNG dengan Selamat dalam C Merentasi Platform Berbeza?

Bagaimanakah Saya Boleh Membenihkan Mt19937 PRNG dengan Selamat dalam C Merentasi Platform Berbeza?

DDD
Lepaskan: 2024-12-05 08:45:12
asal
602 orang telah melayarinya

How Can I Securely Seed the Mt19937 PRNG in C   Across Different Platforms?

Pembenihan Mt19937 PRNG yang Ringkas, Mudah Alih dan Teliti dalam C

Walaupun kekurangan penggunaan std::random_device dan masa(NULL) untuk pembenihan, adalah mungkin untuk mencapai yang teguh dan mudah alih penyelesaian:

Pembenihan Berasaskan CSPRNG

Untuk mengelakkan pengehadan std::random_device, kita boleh menggunakan CSPRNG seperti:

  • Tingkap: CryptGenRandom
  • Seperti Unix: /dev/urandom
  • Last Resort (Pilihan): std::random_device (boleh bermasalah)

Pembenihan Minimum Fungsi:

Fungsi merentas platform berikut menyediakan pembalut minimum di sekeliling pelbagai CSPRNG khusus OS:

size_t sysrandom(void* dst, size_t dstlen) {
  #ifdef _WIN32
    // Windows CSPRNG implementation
  #elif defined(__linux__)
    // Linux CSPRNG implementation
  #else
    // POSIX CSPRNG implementation
  #endif
}
Salin selepas log masuk

Pembenihan Cekap:

Dengan sysrandom tersedia, menyemai PRNG mt19937 menjadi:

std::uint_least32_t seed;
sysrandom(&seed, sizeof(seed));
std::mt19937 gen(seed);
Salin selepas log masuk

Nota Tambahan:

  • Untuk keselamatan yang dipertingkatkan pada Linux (3.17 ), pertimbangkan untuk menggunakan getrandom dengan sandaran ke /dev/urandom.
  • Pada OpenBSD, gunakan getentropy dan bukannya /dev/urandom.
  • Untuk keselamatan kriptografi, penimbalan I/O harus dilumpuhkan apabila menggunakan sysrandom.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenihkan Mt19937 PRNG dengan Selamat dalam C Merentasi Platform Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan