Crypto: getRandomValues() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

注意:此功能在 Web Workers 中可用。

Crypto.getRandomValues() 方法可让您获取加密强度的随机值。作为参数传入的数组将填充随机数字(在密码学意义上的随机)。

为保证足够的性能,实现并非使用真正的随机数生成器,而是使用一个以具有足够熵的值为种子的伪随机数生成器。伪随机数生成器算法(PRNG)可能因 用户代理 而异,但适用于加密目的。

getRandomValues()Crypto 接口中唯一可以在不安全上下文中使用的成员。

语法

js
getRandomValues(typedArray)

参数

typedArray

一个基于整数的 TypedArray,它是以下类型之一:Int8ArrayUint8ArrayUint8ClampedArrayInt16ArrayUint16ArrayInt32ArrayUint32ArrayBigInt64ArrayBigUint64Array(但不包括 Float16ArrayFloat32ArrayFloat64Array)。数组中的所有元素都将被新的随机数覆盖。

返回值

传入的 typedArray 相同,但其内容已被新生成的随机数替换。请注意,typedArray 是就地修改的,不会创建副本。

异常

QuotaExceededError

如果 typedArraybyteLength 超过 65,536,则会抛出此异常。

用法说明

对于密钥生成,建议使用 generateKey() 方法,该方法保证在安全上下文中运行。

Web Cryptography 规范没有规定最低熵度。相反,用户代理被鼓励在生成随机数时提供它们所能提供的最佳熵,使用内置于用户代理本身的、定义良好且高效的伪随机数生成器,但该生成器以来自外部伪随机数源的值为种子,例如平台特定的随机数函数、Unix 的 /dev/urandom 设备或其他随机或伪随机数据源。

示例

js
const array = new Uint32Array(10);
self.crypto.getRandomValues(array);

console.log("Your lucky numbers:");
for (const num of array) {
  console.log(num);
}

规范

规范
Web 加密级别 2
# Crypto-method-getRandomValues

浏览器兼容性

另见