Перейти к содержимому

Web Crypto API

Случайные значения, UUID, ключи и криптографические операции

На этой странице
Open in ChatGPTOpen in Claude

Глобальный объект crypto предоставляет getRandomValues(typedArray), randomUUID() и crypto.subtle — SubtleCrypto на основе той же реализации AWS-LC, что и node:crypto. Ключи — это объекты CryptoKey (глобальный класс); они используют общий ключевой материал с KeyObject, поэтому KeyObject.from(cryptoKey) и keyObject.toCryptoKey() выполняют преобразование без копирования. util.types.isCryptoKey() и util.types.isKeyObject() их распознают.

ОперацияАлгоритмы
digestSHA-1, SHA-256, SHA-384, SHA-512, SHA3-256/384/512, cSHAKE128/256 (без имени функции и настройки)
generateKey, importKey, exportKeyRSASSA-PKCS1-v1_5, RSA-PSS, RSA-OAEP, ECDSA, ECDH (P-256, P-384, P-521), Ed25519, X25519, HMAC, AES-CTR/CBC/GCM/KW, ChaCha20-Poly1305; HKDF и PBKDF2 только импорт
sign, verifyRSASSA-PKCS1-v1_5, RSA-PSS, ECDSA, Ed25519, HMAC
encrypt, decryptRSA-OAEP, AES-CTR, AES-CBC, AES-GCM, ChaCha20-Poly1305
wrapKey, unwrapKeyAES-KW и все алгоритмы encrypt/decrypt
deriveBits, deriveKeyECDH, X25519, HKDF, PBKDF2
getPublicKey, SubtleCrypto.supportsкак в Node (экспериментально)

Форматы ключей: raw (и псевдонимы raw-public/raw-secret), spki, pkcs8 и jwk.

const key = await crypto.subtle.generateKey(
  { name: "AES-GCM", length: 256 },
  true,
  ["encrypt", "decrypt"],
);
const iv = crypto.getRandomValues(new Uint8Array(12));
const sealed = await crypto.subtle.encrypt(
  { name: "AES-GCM", iv },
  key,
  new TextEncoder().encode("hello"),
);

Проверка, имена ошибок и сообщения соответствуют Node. Elide ведёт себя как сборка на основе BoringSSL, поэтому алгоритмы, которые Node предлагает только с OpenSSL 3, недоступны: Ed448, X448, AES-OCB, KMAC, Argon2, ML-DSA, ML-KEM, TurboSHAKE и KangarooTwelve отклоняются с NotSupportedError.

Reference

Status: Full · Not measured · since 1.1.0

Exports

ExportKindStatusNotes
cryptoobjectFullrandomUUID(), getRandomValues(), subtle
SubtleCryptoclassFulldigest(), encrypt(), decrypt(), sign(), verify(), generateKey(), importKey(), exportKey(), deriveBits(), deriveKey(), wrapKey(), unwrapKey()

Была ли эта страница полезной?