Crypto.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.

El método Crypto.getRandomValues() permite obtener valores aleatorios criptográficamente fuertes. El arreglo dado como parámetro se rellena con números aleatorios (aleatorios en su significado criptográfico).

Para garantizar un rendimiento suficiente, las implementaciones no utilizan un verdadero generador de números aleatorios, sino un generador de números pseudoaleatorios sembrado con un valor con suficiente entropía. El algoritmo del generador de números pseudoaleatorios (PRNG, por sus siglas en Inglés) puede variar entre user agents, pero es adecuado para fines criptográficos.

getRandomValues() es el único miembro de la interfaz Crypto que puede utilizarse desde un contexto inseguro.

Sintaxis

js
getRandomValues(typedArray)

Parametros

typedArray

Un TypedArray de enteros, que puede ser uno de los siguientes: Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array (pero no Float32Array ni Float64Array). Todos los elementos de la matriz se sobrescribirán con números aleatorios.

Valor devuelto

El mismo array pasado como typedArray pero con su contenido reemplazado por los nuevos números aleatorios generados. Tenga en cuenta que se modifica el typedArray original y no se realiza ninguna copia.

Excepciones

QuotaExceededError DOMException

Se produce si byteLength de typedArray supera 65,536.

Notas de uso

No utilice getRandomValues() para generar claves de cifrado. En su lugar, utilice el método generateKey(). Hay algunas razones para ello; por ejemplo, no se garantiza que getRandomValues() se ejecute en un contexto seguro.

No existe un grado mínimo de entropía exigido por la especificación Web Cryptography. En su lugar, se pide a los User Agents a que proporcionen la mejor entropía que puedan al generar números aleatorios, utilizando un generador de números pseudoaleatorios bien definido y eficiente integrado en el propio User Agent, pero sembrado con valores tomados de una fuente externa de números pseudoaleatorios, como una función de números aleatorios específica de la plataforma, el dispositivo /dev/urandom de Unix u otra fuente de datos aleatorios o pseudoaleatorios.

Ejemplos

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

console.log("Sus números de la suerte:");
for (const num of array) {
  console.log(num);
}

Especificaciones

Specification
Web Cryptography API
# Crypto-method-getRandomValues

Compatibilidad con navegadores

BCD tables only load in the browser

Véase también