Show Table of Contents
LoginRegister Indonesian (Bahasa Indonesia) translation by Imam Firmansyah (you can also view the original English article) Mari saya mulai posting ini dengan mengatakan bahwa hampir tidak ada peristiwa yang benar-benar acak. Bahkan hasil lemparan koin klasik bisa secara teori diprediksi jika kita tahu efek dari setiap faktor yang terlibat, seperti gesekan udara, gravitasi, dan gaya awal. Hal yang sama berlaku untuk generasi angka acak dan string alfanumerik. Yang terbaik yang bisa kita harapkan adalah untuk membuat angka dan string yang tampaknya tidak mengikuti pola dan tidak dapat diprediksi oleh penyerang. Dalam tutorial ini, kami akan membahas teknik yang berbeda untuk membuat angka acak dan string alfanumerik di PHP. Beberapa di antaranya akan aman secara kriptografi, sementara yang lain hanya dimaksudkan untuk penggunaan biasa, seperti memasukkan pseudocode nama file secara acak atau membuat URL dan menyarankan username. Membuat Angka Acak di PHPAda tiga
fungsi yang berbeda untuk membuat angka acak di PHP. Semua dari mereka akan menerima nilai minimum dan maksimum yang mungkin untuk angka acak dan menghasilkan angka acak untuk Anda. Ini adalah Dengan Dengan Fungsi menjadi lebih baik di PHP 7.2.0 dengan menghapus bug dari sebuah modul. Ini berarti bahwa untuk beberapa seed tertentu, urutan angka acak Anda sekarang akan sedikit lebih baik dibandingkan dengan versi yang lebih lama. Namun, beberapa kode khusus mungkin benar-benar bergantung pada bias ini. Jika demikian, Anda dapat menggunakan algoritma
seed yang lebih tua dengan memanggil fungsi Fungsi 187 3276 1267 15 1267 34598 3467 125 17 Dalam urutan di atas, kami memiliki 1267 dua kali dalam output, tetapi itu tidak berarti bahwa seluruh urutan mulai mengulang setelah itu. Tidak mungkin untuk mendapatkan angka yang sama diulang begitu cepat dalam urutan acak, tetapi itu mungkin! Kriptografi yang Diamankan menggunakan Angka AcakJika Anda ingin angka pseudo-random kriptografi aman, fungsi Random FloatSelain menghasilkan integer acak, Anda
mungkin juga ingin menghasilkan float. Ini dapat dilakukan dengan mudah dengan hanya membagi angka acak dengan nilai yang dikembalikan oleh <?php // Output: 0.69458310943776 echo mt_rand(0, mt_getrandmax())/mt_getrandmax(); function mt_random_float($min, $max) { $float_part = mt_rand(0, mt_getrandmax())/mt_getrandmax(); $integer_part = mt_rand($min, $max - 1); return $integer_part + $float_part; } // Output: 10.199064863938 echo mt_random_float(10, 11); // Output: 35.540808309121 echo mt_random_float(15, 50); ?> Ketika membuat float acak antara batas yang diberikan, kami memastikan bahwa integer acak tidak melewati di atas Menempatkan Generator Angka AcakSatu konsep yang perlu sedikit penjelasan adalah seed. Sederhananya, ini hanya angka yang dapat digunakan untuk menginisialisasi fungsi Penting untuk diingat bahwa memberikan
inisialisasi awal seed setiap saat sebelum memanggil <?php mt_srand(10); // Output: 1656398468 echo mt_rand(); mt_srand(10); // Output: 1656398468 echo mt_rand(); mt_srand(10); // Output: 1656398468 echo mt_rand(); ?> Menempatkan angka acak itu berguna ketika Anda ingin membuat angka yang bisa direproduksi secara berurutan. Potongan kode berikut menghasilkan urutan angka acak yang sama ketika dijalankan dua kali. <?php mt_srand(10); $count = 0; while($count < 10) { echo mt_rand(0, 100)." "; $count++; } // Output on First Run: // 68 58 68 13 3 48 30 37 96 82 // Output on Second Run: // 68 58 68 13 3 48 30 37 96 82 Membuat urutan acak yang dapat
direproduksi dengan cara ini dapat membantu debug program yang sedang diuji menggunakan data acak — ketika Anda tau tempatnya, Anda dapat mereproduksi input yang sama untuk mencari tahu apa yang salah. Membuat String Alfanumerik secara Acak di PHPAda banyak cara untuk membuat string acak alfanumerik, dan apa yang Anda gunakan akan bergantung pada kebutuhan Anda. Membuat Shuffled StringJika Anda ingin membuat string alfanumerik secara acak dari satu set karakter tetap, Anda dapat menggunakan fungsi Ingat bahwa string acak yang dihasilkan dengan cara ini tidak aman secara kriptografi. Namun, string akan tetap tidak dapat diprediksi untuk penggunaan umum seperti membuat nama file acak atau URL. Berikut beberapa contohnya: <?php $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyz'; // Output: 54esmdr0qf echo substr(str_shuffle($permitted_chars), 0, 10); $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // Output: video-g6swmAP8X5VG4jCi.mp4 echo 'video-'.substr(str_shuffle($permitted_chars), 0, 16).'.mp4'; ?> Output Anda kemungkinan besar akan berbeda dalam kedua kasus. Dalam kasus pertama, kami hanya mengocok string karakter yang diizinkan dan kemudian mengambil 10 karakter pertama. Dalam kasus kedua, kami menambahkan "video" di awal pembuatan string dan ".mp4" di bagian akhir. Metode ini membuat string alfanumerik acak yang sangat mudah, tetapi memiliki beberapa masalah. Sebagai contoh, Anda tidak akan pernah mendapatkan karakter yang sama dalam string acak Anda sebanyak dua kali. Juga, panjangnya output string acak hanya bisa selama input string. Membuat String AcakJika masalah yang saya cantumkan di atas adalah deal breaker, Anda mungkin ingin melihat beberapa penerapan lain. Kode berikut akan menyelesaikan kedua masalah ini. <?php $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; function generate_string($input, $strength = 16) { $input_length = strlen($input); $random_string = ''; for($i = 0; $i < $strength; $i++) { $random_character = $input[mt_rand(0, $input_length - 1)]; $random_string .= $random_character; } return $random_string; } // Output: iNCHNGzByPjhApvn7XBD echo generate_string($permitted_chars, 20); // Output: 70Fmr9mOlGID7OhtTbyj echo generate_string($permitted_chars, 20); // Output: Jp8iVNhZXhUdSlPi1sMNF7hOfmEWYl2UIMO9YqA4faJmS52iXdtlA3YyCfSlAbLYzjr0mzCWWQ7M8AgqDn2aumHoamsUtjZNhBfU echo generate_string($permitted_chars, 100); ?> Anda dapat memodifikasinya dengan menambahkan sufiks dan prefiks tertentu ke string acak yang dibuat. Orang yang menggunakan PHP 7 dapat
meningkatkan generasi string dengan menggunakan fungsi kriptografi Membuat String Acak HeksadesimalJika Anda ingin membuat string acak heksadesimal di PHP, Anda juga dapat menggunakan fungsi Anda akan terus mendapatkan hash unik asalkan inputnya unik. Ini bisa dicapai dengan menggunakan output dari fungsi
seperti Berikut adalah contoh output yang dikembalikan oleh fungsi-fungsi ini: <?php // Output: 36e5e490f14b031e echo substr(md5(time()), 0, 16); // Output: aa88ef597c77a5b3 echo substr(sha1(time()), 0, 16); // Output: 447c13ce896b820f353bec47248675b3 echo md5(time()); // Output: 6c2cef9fe21832a232da7386e4775654b77c7797 echo sha1(time()); ?> Seperti yang Anda lihat, membuat string heksadesimal acak dan unik hingga 40 karakter sangat mudah di PHP. Membentuk Keamanan Kriptografi dari String AcakKetiga fungsi untuk membuat string alfanumerik acak yang telah kita bahas sejauh ini tidak aman secara kriptografi. Untungnya, PHP juga memiliki fungsi yang disebut Setelah Anda memiliki output dalam bentuk byte acak, Anda dapat
menggunakan fungsi <?php // Output: b7b33efa07915b60ad55 echo bin2hex(random_bytes(10)); // Output: a2e6cb1f25616324c8a11a2cceb0b47c590949ea echo bin2hex(random_bytes(20)); // Output: 25af3b86e11884ef5e8ef70a0ad06cba81b89ed6af3781a0 echo bin2hex(random_bytes(24)); ?> Fungsi lain yang dapat Anda gunakan untuk membuat byte acak kriptografi yang aman adalah Akhir KataDalam tutorial ini, kami melihat generasi bilangan acak dan string alfanumerik di PHP. Membuat bilangan acak dapat berguna dalam berbagai situasi, seperti dalam permainan di mana Anda harus memanggil pemain musuh atau secara acak memberi pengguna beberapa petunjuk tentang huruf sehingga mereka dapat mengisi seluruh kata. Sama seperti angka acak, generasi string acak alfanumerik juga bisa sangat membantu dalam banyak keadaan. Dengan bantuan Saya harap Anda menikmati tutorial ini. Jika Anda memiliki pertanyaan, jangan sungkan untuk bertanya di komentar. |