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

js
getRandomValues(typedArray)

Tham số

typedArray

Một TypedArray dự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ải Float16Array, Float32Array hay Float64Array). 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 byteLength của typedArray vượ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ụ

js
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