SecureRandom adalah pustaka PHP untuk menghasilkan angka acak yang aman dan menggunakannya untuk operasi pengacakan umum seperti mengacak array atau menghasilkan urutan string seperti kata sandi. Sebelum versi 7.0, PHP tidak memiliki fungsi acak aman bawaan, namun masih dimungkinkan untuk menggunakan sumber keacakan yang berbeda untuk menghasilkan nilai acak aman. Jadi, perpustakaan ini memiliki dua tujuan utama:
Pustaka ini tidak menyediakan generator byte acak aman tambahan apa pun. Itu hanya menggunakan generator byte yang tersedia untuk PHP melalui ekstensi atau secara internal. Empat generator yang umum tersedia untuk PHP adalah:
/dev/(u)random
mcrypt_create_iv()
openssl_random_pseudo_bytes()
Keamanan keacakan yang dihasilkan oleh perpustakaan ini sepenuhnya bergantung pada generator byte acak yang mendasarinya. Perpustakaan tidak melakukan transformasi tambahan apa pun pada byte selain normalisasi yang diperlukan untuk menghasilkan distribusi angka acak yang merata.
Dokumentasi API tersedia di: http://kit.riimu.net/api/securerandom/
OpenSSL
(Untuk menggunakan generator OpenSSQL)Mcrypt
(Untuk menggunakan generator Mcrypt)/dev/urandom
harus dapat dibaca untuk menggunakan generator pembaca Acak Cara termudah untuk menginstal perpustakaan ini adalah dengan menggunakan Komposer untuk menangani dependensi Anda. Untuk menginstal perpustakaan ini melalui Komposer, cukup ikuti dua langkah berikut:
Dapatkan composer.phar
dengan menjalankan instalasi baris perintah Composer di root proyek Anda.
Setelah Anda menjalankan skrip instalasi, Anda harus memiliki file composer.phar
di root proyek Anda dan Anda dapat menjalankan perintah berikut:
php composer.phar require "riimu/kit-securerandom:^1.3"
Setelah menginstal perpustakaan ini melalui Komposer, Anda dapat memuat perpustakaan dengan menyertakan file vendor/autoload.php
yang dihasilkan oleh Komposer selama instalasi.
Jika Anda sudah familiar dengan cara menggunakan Composer, Anda dapat menambahkan perpustakaan sebagai dependensi dengan menambahkan file composer.json
berikut ke proyek Anda dan menjalankan perintah composer install
:
{
"require" : {
"riimu/kit-securerandom" : " ^1.3 "
}
}
Jika Anda tidak ingin menggunakan Komposer untuk memuat pustaka, Anda juga dapat mengunduh pustaka secara manual dengan mengunduh rilis terbaru dan mengekstrak folder src
ke proyek Anda. Anda kemudian dapat memasukkan file src/autoload.php
yang disediakan untuk memuat kelas perpustakaan.
Penggunaan perpustakaan sangat sederhana. Cukup buat sebuah instance dari SecureRandom
dan panggil salah satu metode untuk menghasilkan nilai acak. Misalnya:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom ();
var_dump ( base64_encode ( $ rng -> getBytes ( 32 ))); // Returns a random byte string
var_dump ( $ rng -> getInteger ( 100 , 1000 )); // Returns a random integer between 100 and 1000
var_dump ( $ rng -> getFloat ()); // Returns a random float between 0 and 1
var_dump ( $ rng -> getRandom ()); // Returns a random float between 0 and 1 (not including 1)
var_dump ( $ rng -> getArray ( range ( 0 , 100 ), 5 )); // Returns 5 randomly selected elements from the array
var_dump ( $ rng -> choose ( range ( 0 , 100 ))); // Returns one randomly chosen value from the array
var_dump ( $ rng -> shuffle ( range ( 0 , 9 ))); // Returns the array in random order
var_dump ( $ rng -> getSequence ( ' 01 ' , 32 )); // Returns a random sequence of 0s and 1s with length of 32
var_dump ( $ rng -> getSequence ([ ' a ' , ' b ' , ' c ' ], 5 )); // Returns an array with 5 elements randomly chosen from 'a', 'b', and 'c'
var_dump ( $ rng -> getUuid ()); // Returns a random version UUID, e.g. '00056a74-036b-47c5-ab35-6f34a41a70ae'
Metode berikut tersedia di SecureRandom
untuk mengambil keacakan:
getBytes($count)
mengembalikan string byte acak dengan panjang sama dengan $count.
getInteger($min, $max)
mengembalikan bilangan bulat acak antara dua bilangan bulat positif yang diberikan (inklusif).
getFloat()
mengembalikan nilai float acak antara 0 dan 1 (inklusif).
getRandom()
mengembalikan nilai float acak antara 0 dan 1 yang memiliki presisi 52 bit sehingga nilai yang dikembalikan selalu kurang dari 1. Dibandingkan dengan getFloat()
, distribusi nilai lebih seragam dan tidak bergantung pada PHP_INT_MAX
.
getArray(array $array, $count)
mengembalikan sejumlah elemen acak dari array yang diberikan. Elemen-elemennya berada dalam urutan acak, tetapi kuncinya tetap dipertahankan.
choose(array $array)
mengembalikan nilai acak yang dipilih dari array.
shuffle(array $array)
mengembalikan array dalam urutan acak. Kuncinya disimpan.
getSequence($choices, $length)
mengembalikan urutan nilai atau karakter acak. Pilihannya dapat diberikan sebagai string atau array. Jenis nilai yang dikembalikan bergantung pada jenis pilihan.
getUuid()
mengembalikan versi acak 4 pengenal unik universal. UUID adalah pengidentifikasi unik yang dapat dihasilkan secara acak, independen, dan memiliki kemungkinan tabrakan yang sangat kecil. Dan contoh UUID bisa jadi 00056a74-036b-47c5-ab35-6f34a41a70ae
.
Generator yang disediakan oleh perpustakaan ini menggunakan /dev/urandom
sebagai sumber keacakan secara default. Membaca dari /dev/random
tidak memberikan keamanan tambahan pada aplikasi web PHP pada umumnya dan sifat pemblokirannya akan membuatnya sangat tidak cocok untuk tujuan tersebut.
Hanya ada beberapa kasus yang sah di mana Anda harus membaca dari /dev/random
sebagai gantinya. Hal ini terutama terjadi jika Anda khawatir /dev/urandom
belum diunggulkan dengan benar. Namun, hal ini biasanya tidak terjadi pada aplikasi web, karena masalah ini cenderung hanya terjadi pada startup sistem.
Jika Anda tahu bahwa Anda benar-benar perlu membaca dari /dev/random
Anda dapat mengatur RandomReader
dan Mcrypt
untuk menggunakannya sebagai sumber keacakan dengan mengatur parameter konstruktor ke false dan menyediakan generator ke SecureRandom
di konstruktor. Misalnya:
<?php
require ' vendor/autoload.php ' ;
$ generator = new Riimu Kit SecureRandom Generator RandomReader ( false );
$ rng = new Riimu Kit SecureRandom SecureRandom ( $ generator );
Saat SecureRandom
dibuat, ia akan mencoba menggunakan salah satu generator acak aman yang tersedia, bergantung pada generator mana yang didukung oleh platform saat ini. Sumber acak berikut tersedia dan akan dicoba dalam urutan berikut:
GeneratorInternal
menggunakan fungsi internal yang tersedia di PHP 7.0GeneratorRandomReader
hanya membaca byte dari perangkat acak /dev/urandom
GeneratorMcrypt
menggunakan mcrypt_create_iv()
untuk menghasilkan byte acak menggunakan MCRYPT_DEV_URANDOM
sebagai sumbernya.GeneratorOpenSSL
menggunakan openssl_random_pseudo_bytes()
untuk menghasilkan byte acak.Ada beberapa perdebatan mengenai apakah algoritma yang digunakan oleh OpenSSL sebenarnya kuat secara kriptografis atau tidak. Namun, karena kurangnya bukti konkrit yang menentangnya dan karena implikasi kekuatannya dalam manual PHP, perpustakaan ini akan menggunakan OpenSSL sebagai cadangan terakhir secara default untuk mencapai kompatibilitas yang lebih baik di berbagai platform.
Jika Anda ingin mendefinisikan generator byte secara eksplisit, Anda dapat menyediakannya sebagai parameter konstruktor untuk SecureRandom
. Misalnya:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom (
new Riimu Kit SecureRandom Generator Mcrypt ()
);
Perpustakaan ini adalah Hak Cipta (c) 2014-2017 Riikka Kalliomäki.
Lihat LISENSI untuk informasi lisensi dan penyalinan.