Rumah >pembangunan bahagian belakang >tutorial php >Rawak dalam PHP - Adakah anda berasa bertuah?
Artikel ini mengkaji cabaran menggunakan penjanaan nombor rawak dalam kriptografi, yang menonjolkan perbezaan antara Php 5 dan Php 7. Php 5 tidak mempunyai mekanisme yang sedia ada untuk menghasilkan nombor rawak yang selamat secara kriptografi, sementara PHP 7 memperkenalkan random_bytes
dan fungsi untuk tujuan ini. random_int
Generator Nombor Pseudorandom Cryptographically Secure (CSPRNG) adalah PRNG yang direka untuk aplikasi kriptografi. Ciri utamanya adalah rawak berkualiti tinggi, penting untuk:
Generasi utama
php 7 menyediakan (mengembalikan rentetan panjang byte yang ditentukan) dan
(mengembalikan integer rawak dalam julat tertentu) untuk fungsi CSPRNG.
random_bytes
random_int
Contoh:
random_bytes
<code class="language-php">$bytes = random_bytes(10); var_dump(bin2hex($bytes)); // Possible output: string(20) "7dfab0af960d359388e6"</code>
random_int
Fungsi ini menggunakan pelbagai sumber rawak bergantung kepada sistem operasi, mengutamakan pilihan selamat seperti
<code class="language-php">var_dump(random_int(1, 100)); // Possible output: 27</code>(BSD),
(Linux), dan akhirnya CryptGenRandom
sebagai sandaran. Kesalahan dilemparkan jika tiada sumber yang sesuai ditemui. arc4random_buf
getrandom(2)
/dev/urandom
Ujian rawak
Menilai kualiti penjana nombor rawak melibatkan ujian statistik. Satu contoh mudah adalah mensimulasikan dadu gulung. Pengagihan hasil yang dijangkakan untuk menggulung tiga dadu 1,000,000 kali dapat dibandingkan dengan hasil sebenar yang dihasilkan oleh dan fungsi standard
.
random_int
Contoh kod (dipermudahkan untuk keringkasan) dan graf perbandingan (ditunjukkan di bawah) menunjukkan bahawa rand
mempamerkan pengedaran lebih dekat dengan nilai yang diharapkan, menunjukkan rawak unggul berbanding dengan
random_int
rand
, , atau akses langsung ke atau
. Perpustakaan seperti RandomLib atau Libsodium menawarkan penyelesaian tambahan.
openssl_random_pseudo_bytes()
mcrypt_create_iv()
Perpustakaan /dev/random
/dev/urandom
Untuk keserasian Php 5, Perpustakaan Inisiatif Paragon Perpustakaan menyediakan random_compat
dan fungsi. Ia boleh dipasang melalui komposer (
<code class="language-php">$bytes = random_bytes(10); var_dump(bin2hex($bytes)); // Possible output: string(20) "7dfab0af960d359388e6"</code>
Perpustakaan ini mengutamakan sumber rawak yang berbeza berbanding dengan Php 7, bermula dengan /dev/urandom
.
contoh generasi kata laluan yang mudah menggunakan random_compat
:
<code class="language-php">var_dump(random_int(1, 100)); // Possible output: 27</code>
Kesimpulan
Menggunakan CSPRNG adalah penting untuk aplikasi yang selamat. Perpustakaan random_compat
menawarkan penyelesaian serasi ke belakang untuk PHP 5, manakala pemaju PHP 7 harus secara langsung menggunakan random_bytes
dan random_int
. Mengutamakan penjanaan nombor rawak yang boleh dipercayai dengan ketara meningkatkan keselamatan aplikasi.
Description | Link |
---|---|
Die Hard Test | https://www.php.cn/link/1852a2083dbe1c2ec33ab9366feb2862 |
Chi-square test with dice example | https://www.php.cn/link/fb6a253729096c1e92e43c26a6fdadc3 |
Kolmogorov-Smirnov Test | https://www.php.cn/link/030d13e49bb7d1add5ac5ea2e4a43231 |
Spectral Test | https://www.php.cn/link/6bbd80b04535d39be5e02dbfd8730469 |
RaBiGeTe test suite | https://www.php.cn/link/e626afbcdb83368b3491c0c473da19f1 |
Random Number Generation In PHP (2011) | https://www.php.cn/link/f7ff233e4ed3e6b13c5d5c7a9201e4ec |
Testing RNG part 1 and 2 | https://www.php.cn/link/a1c71b134d46d7f7ff00f488874a8d43, https://www.php.cn/link/2e3517ba49c2a7c999b9c8381185ae4e |
terima kasih kepada Scott Arciszewski atas bantuan semakan rakan sebaya mereka.
Atas ialah kandungan terperinci Rawak dalam PHP - Adakah anda berasa bertuah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!