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
642 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!

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