Alat pengembang · generator UUID
Bagaimana crypto.getRandomValues Mengubah 16 Byte Acak Menjadi UUID v4
· Cara kerjanya
uuid kriptografi browser-apis
Versi 4 UUID adalah 16 bytes dari generator yang aman secara kriptografis dengan enam bit ditimpa. Posting ini meneruskan byte dari panggilan Web Crypto ke string karakter 36 yang sudah dikenal.
ID yang Anda perlukan sebelum server menjawab — mengapa pembuatan sisi klien muncul dalam bentuk offline-first, UI optimis, dan impor batch
Formulir offline mungkin memerlukan pengidentifikasi sebelum server merespons, dan UI yang optimis dapat membuat beberapa objek sekaligus. UUIDv4 dirancang untuk dihasilkan secara independen tanpa penghitung pusat. Ini bukan bukti identitas pengguna atau rahasia yang dapat Anda gunakan dengan aman sebagai pengganti autentikasi. Jika database Anda memerlukan nilai yang diurutkan berdasarkan waktu pembuatan, ID v4 acak tidak akan diurutkan; itu adalah keputusan skema yang terpisah dan bukan alasan untuk melemahkan keacakannya.
Apa yang sebenarnya dilakukan crypto.getRandomValues — mengisi array yang diketik dari sumber entropi sistem operasi, bukan dari rumus JavaScript
crypto.getRandomValues mengisi Uint8Array dengan 16 bytes dari generator acak platform browser yang aman secara kriptografis. Itu tidak memperoleh nilai dari Date.now() atau Math.random(). Sistem operasi dan browser mengimplementasikan sumber entropi yang mendasarinya, sehingga kode JavaScript menerima byte daripada menerapkan rumus angka acak itu sendiri. ToolAcre menolak membuat pengenal jika sumber amannya tidak ada.
Menimpa byte 6 dan byte 8 — bagaimana versi nibble menjadi 4 dan bit varian menjadi 10xx, dan mengapa hanya enam bit yang hilang
RFC 9562 menjelaskan versi nibble dan bidang varian. Dimulai dengan enam belas byte acak, atur empat bit teratas byte 6 ke biner 0100 (versi 4), dan atur dua bit teratas byte 8 ke 10 (varian standar). Implementasinya menggunakan (byte6 & 0x0f) | 0x40 dan (byte8 & 0x3f) | 0x80. Enam bit ditimpa, menyisakan 122 bit acak di bawah skema UUIDv4. Bit-bit konstan tersebut tidak membuat byte yang tersisa menjadi kurang acak.
Dari byte hingga 8-4-4-4-12 — pengkodean hex, keluaran huruf kecil, dan penempatan tanda hubung sesuai standar yang mendefinisikannya
Enkode setiap byte tepat dua karakter heksadesimal dengan nol di depannya bila diperlukan. Masukkan tanda hubung setelah 4, 6, 8 dan 10 bytes, sehingga menghasilkan 8-4-4-4-12 grup karakter heksadesimal yang sudah dikenal. String v4 yang valid memiliki 4 di awal grup ketiganya dan salah satu dari 8, 9, a atau b di awal grup keempat. Pemformatan tidak menambah entropi; itu hanya membuat nilai 128-bit yang mendasarinya dapat dioperasikan dengan alat yang mengharapkan bentuk teks UUID.
Contoh praktis — satu buffer 16-byte ditelusuri melalui masking dan pemformatan ke string UUID terakhirnya
Telusuri byte ilustratif 00 11 22 33 44 55 F6 77 38 99 AA BB CC DD EE FF. Menutupi F6 pada byte 6 menghasilkan 46; menutupi 38 pada byte 8 menghasilkan B8. Setelah diformat heksadesimal huruf kecil dan tanda hubung, hasilnya adalah 00112233-4455-4677-b899-aabbccddeeff. Ini adalah contoh pengajaran yang sengaja diperbaiki, bukan pengenal untuk digunakan kembali dalam produksi. Hasilkan yang baru untuk setiap objek nyata dan bandingkan sendiri versi dan posisi variannya.
crypto.randomUUID() sebagai pintasan satu panggilan — apa yang dilakukan metode baru untuk Anda dan jika metode tersebut tidak tersedia
Pada asal yang aman, crypto.randomUUID() melakukan pembuatan dan pemformatan v4 dalam satu panggilan. ToolAcre menggunakannya jika tersedia dan sebaliknya kembali ke getRandomValues dengan operasi bit eksplisit di atas. Ketersediaan browser berbeda-beda berdasarkan konteks: randomUUID dibatasi untuk konteks aman, sedangkan getRandomValues mungkin masih ada di halaman HTTP LAN. Tidak ada cabang yang kembali ke Math.random hanya agar tombol tetap berfungsi.
Apa yang tidak tercakup dalam hal ini — versi berbasis waktu (v1, v7) dan berbasis nama (v3, v5), yang memerlukan input berbeda dari byte acak
Mekanisme ini tidak menjelaskan pengidentifikasi v1 atau v7 berbasis waktu, pengidentifikasi v3/v5 berbasis nama, atau tata letak v8 eksperimental. UUID acak memiliki kemungkinan tabrakan yang sangat rendah dengan keacakan suara, bukan ketidakmungkinan tabrakan secara matematis mutlak. UUID v4 dengan sendirinya tidak boleh digunakan sebagai pemeriksaan kontrol akses atau token penyetelan ulang kata sandi tanpa mempertimbangkan kerahasiaan, masa pakai, dan otorisasi secara independen.
Kesimpulan: keacakan yang aman adalah keseluruhan pekerjaannya — generator ToolAcre UUID diambil dari browser yang sama CSPRNG, jadi apa yang Anda salin adalah apa yang akan dihasilkan oleh kode Anda
Keacakan yang aman adalah pekerjaannya. Generator ToolAcre UUID menggunakan CSPRNG browser, menerapkan bit versi dan varian, serta menawarkan pemeriksaan keteraturan untuk nilai yang disalin. Bandingkan hasil yang dihasilkan dengan contoh tata letak byte, lalu gunakan keluaran baru dan unik hanya untuk peran yang sebenarnya ditetapkan oleh aplikasi Anda.