Buat angka acak
Buat angka acak dalam rentang tertentu tanpa duplikat, atau string acak dari huruf, digit, dan simbol, dengan crypto.getRandomValues.
Cara membuat angka dan string acak
- 1
Pilih angka atau string
Beralih antara rentang angka, bulat atau desimal, dan string acak yang disusun dari jenis karakter yang Anda pilih.
- 2
Atur rentang atau alfabet
Untuk angka, atur nilai minimum, maksimum, dan apakah duplikat diizinkan. Untuk string, nyalakan atau matikan jenis karakter, atau tempel alfabet buatan Anda sendiri.
- 3
Buat dan salin hasilnya
Hingga 10.000 nilai muncul sekaligus, satu per baris, siap disalin langsung ke papan klip.
Mengapa crypto.getRandomValues, bukan Math.random
Math.random di JavaScript memang cepat, tetapi tidak pernah dibuat untuk tahan terhadap tebakan. Di beberapa mesin JavaScript, segelintir hasil sudah cukup untuk merekonstruksi keadaan internalnya dan menebak setiap nilai berikutnya. Sebaliknya, crypto.getRandomValues mengambil angka dari generator sistem operasi yang aman secara kriptografis, sumber yang sama yang dipakai browser untuk membuat kunci enkripsi, sehingga urutannya tidak bisa ditebak hanya dengan mengamatinya. Alat ini memakai sumber itu di semua tempat, termasuk saat mengacak daftar ketika duplikat dimatikan.
Bias modulo, dan cara rejection sampling menghilangkannya
Cara naif untuk mengubah angka acak 32-bit menjadi “nilai dari 1 sampai 100” adalah mengambil sisa baginya dengan 100 (modulo), tetapi cara ini tanpa terlihat lebih memihak ujung bawah rentang: 2^32 tidak habis dibagi 100, jadi nilai sisa yang tidak membentuk kelipatan penuh semuanya berakhir pada segelintir hasil yang sama. Alat ini justru membuang setiap tarikan yang jatuh di sisa yang tidak rata itu dan mencoba lagi. Teknik ini disebut rejection sampling, dan berkat itu setiap angka dalam rentang yang diminta punya peluang muncul yang persis sama.
Setiap nilai dibuat di tab ini
Angka dan string sepenuhnya dibuat di browser Anda dengan Web Crypto API. Apa pun yang Anda buat tidak dikirim ke server dan tidak ditulis ke penyimpanan browser. Tautan berbagi hanya menyimpan pengaturan Anda, tidak pernah nilai yang sebenarnya, karena tautan yang bisa ditebak akan menggagalkan tujuan undian acak.
Pertanyaan yang sering diajukan
Mengapa crypto.getRandomValues lebih baik daripada Math.random?
Math.random dioptimalkan untuk kecepatan, bukan untuk sulit ditebak, dan di beberapa mesin JavaScript hasilnya terbukti bisa direkonstruksi dari sampel kecil. crypto.getRandomValues mengambil angka dari generator angka acak sistem operasi yang aman secara kriptografis, yang tidak punya celah seperti itu.
Bagaimana “tanpa duplikat” bekerja untuk rentang yang besar?
Untuk rentang hingga lima juta kemungkinan nilai, alat ini mengacak seluruh daftar dengan algoritma Fisher-Yates dan mengambil sebanyak yang Anda minta. Di atas itu, alat ini menarik nilai satu per satu dan hanya menyimpan nilai baru. Cara ini tetap cepat karena tabrakan jarang terjadi bila jumlah nilai yang diminta jauh lebih sedikit daripada isi rentangnya.
Apa itu bias modulo, dan mengapa ini bukan sekadar % rentang?
Memperkecil angka acak 32-bit dengan operasi sisa bagi biasa membuat ujung bawah rentang sedikit lebih mungkin muncul, karena 2^32 bukan kelipatan tepat dari sebagian besar ukuran rentang. Alat ini menolak dan menarik ulang irisan kecil nilai yang menyebabkan kemiringan itu, sehingga setiap hasil dalam rentang Anda punya peluang yang sama.
Bisakah hasilnya dipakai sebagai kata sandi?
String acak yang dibuat di sini dengan alfabet besar dan panjang yang cukup sama kuatnya dengan kata sandi dari generator khusus. Bila Anda memerlukan angka entropi, skor kekuatan, atau frasa sandi, alat Buat password memang dibuat untuk itu.
Berapa banyak angka atau string yang bisa dibuat sekaligus?
Hingga 10.000 dalam satu kali proses, baik angka maupun string. Jumlah itu lebih dari cukup untuk undian, data uji, dan pengambilan sampel tanpa perlu menjalankan alat berulang kali.
Apakah nilai yang dibuat pernah keluar dari browser saya?
Tidak. Setiap angka dan setiap karakter dibuat secara lokal dengan Web Crypto API, dan tidak ada yang diunggah ke mana pun. Menyalin ke papan klip adalah satu-satunya cara sebuah nilai keluar dari halaman, dan itu sepenuhnya di bawah kendali Anda.
Mengapa tautan berbagi tidak menyertakan angka yang sebenarnya?
Tautan hanya mengulang pengaturan Anda (rentang, jumlah, dan apakah duplikat diizinkan), tidak pernah nilainya sendiri. Tautan yang bisa memutar ulang angka “acak” yang sama kapan saja akan membuatnya bisa ditebak, dan itu menggagalkan tujuan membuatnya dengan cara ini.