Crypto: phương thức getRandomValues()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Note: This feature is available in Web Workers.
Phương thức Crypto.getRandomValues() cho phép bạn lấy các giá trị ngẫu nhiên đủ mạnh về mặt mật mã.
Mảng được truyền làm tham số sẽ được điền bằng các số ngẫu nhiên (ngẫu nhiên theo nghĩa mật mã).
Để bảo đảm hiệu năng đủ tốt, các cách triển khai không dùng bộ sinh số ngẫu nhiên thực sự mà dùng bộ sinh số giả ngẫu nhiên được khởi tạo hạt giống bằng một giá trị có đủ entropy. Thuật toán bộ sinh số giả ngẫu nhiên (PRNG) có thể khác nhau giữa các trình duyệt, nhưng phù hợp cho mục đích mật mã.
getRandomValues() là thành viên duy nhất của giao diện Crypto có thể dùng từ ngữ cảnh không bảo mật.
Cú pháp
getRandomValues(typedArray)
Tham số
typedArray-
Một
TypedArraydựa trên số nguyên, có thể là một trong các kiểu sau:Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,BigInt64Array,BigUint64Array(nhưng không phảiFloat16Array,Float32ArrayhayFloat64Array). Tất cả phần tử trong mảng sẽ bị ghi đè bằng các số ngẫu nhiên.
Giá trị trả về
Chính mảng đã được truyền vào dưới dạng typedArray, nhưng nội dung của nó được thay bằng các số ngẫu nhiên mới sinh ra.
Lưu ý rằng typedArray được sửa đổi tại chỗ và không tạo bản sao.
Ngoại lệ
QuotaExceededError-
Được ném ra nếu
byteLengthcủatypedArrayvượt quá 65.536.
Ghi chú về cách dùng
Hãy ưu tiên phương thức generateKey() để tạo khóa, vì phương thức này được bảo đảm chạy trong ngữ cảnh bảo mật.
Đặc tả Web Cryptography không quy định mức entropy tối thiểu bắt buộc.
Thay vào đó, các trình duyệt được khuyến nghị cung cấp entropy tốt nhất có thể khi tạo số ngẫu nhiên,
bằng cách dùng một bộ sinh số giả ngẫu nhiên được xác định rõ ràng và hiệu quả tích hợp ngay trong trình duyệt,
nhưng được khởi tạo hạt giống bằng các giá trị lấy từ một nguồn số giả ngẫu nhiên bên ngoài, chẳng hạn như
hàm sinh số ngẫu nhiên đặc thù của nền tảng, thiết bị Unix /dev/urandom, hoặc nguồn dữ liệu ngẫu nhiên hay giả ngẫu nhiên khác.
Ví dụ
const array = new Uint32Array(10);
self.crypto.getRandomValues(array);
console.log("Your lucky numbers:");
for (const num of array) {
console.log(num);
}
Thông số kỹ thuật
| Specification |
|---|
| Web Cryptography Level 2> # Crypto-method-getRandomValues> |
Tương thích trình duyệt
Xem thêm
- Web Crypto API
Math.random, một nguồn tạo số ngẫu nhiên không dùng cho mật mã.