Web Crypto API
Криптография в браузере: хэширование, шифрование, цифровые подписи через
crypto.subtle.
Что это
Глобальный объект crypto доступен в браузере и Web Workers. Сердце — crypto.subtle (SubtleCrypto): асинхронные операции хэширования (SHA-1/256/384/512), симметричного/асимметричного шифрования (AES, RSA), HMAC, цифровых подписей, генерации/импорта ключей. Работает только в secure context (HTTPS или localhost).
Базовое использование
// SHA-1 хэш строки (для Podcast)
const text = 'episode-title';
const data = new TextEncoder.encode(text);
const buf = await crypto.subtle.digest('SHA-1', data);
const hex = [...new Uint8Array(buf)]
.map((b) => b.toString(16).padStart(2, '0'))
.join('');
// → "a4d8c1..."
// SHA-256
const hash = await crypto.subtle.digest('SHA-256', data);
// Случайные байты (sync, не через subtle)
const bytes = crypto.getRandomValues(new Uint8Array(16));
// UUID
const id = crypto.randomUUID; // '7c..-..-..-..-..'
Основные методы
| Метод | Что делает |
|---|---|
crypto.subtle.digest(algo, data) |
Хэш SHA-1/256/384/512 |
crypto.subtle.encrypt/decrypt |
AES-GCM, RSA-OAEP |
crypto.subtle.sign/verify |
HMAC, ECDSA, RSA-PSS |
crypto.subtle.generateKey |
Генерация CryptoKey |
crypto.subtle.importKey/exportKey |
Импорт/экспорт ключей |
crypto.getRandomValues(typedArray) |
CSPRNG, sync |
crypto.randomUUID |
UUID v4 |
Поддержка браузерами
- Все современные браузеры, Node.js 15+
- Требует HTTPS или localhost (secure context)
- В Node.js:
globalThis.cryptoилиimport { webcrypto } from 'node:crypto'
Подводные камни
- SHA-1 криптографически слаб (но достаточен для guid-генерации в Podcast)
- Все методы
subtle.*асинхронные, возвращают Promise - На HTTP (не localhost)
crypto.subtleбудетundefined - Результат
digest—ArrayBuffer, требует ручной конвертации в hex/base64
Используется в bootcamp
- Podcast Player — генерация GUID для эпизода RSS-фида через SHA-1 от ссылки/заголовка
Ссылки
🎓 Источники
- 🎓 🔀 Фронтендеры не знают Web API: OPFS, Web Crypto, Websocket, WebRTC, Locks, Workers, Cache API · TimurShemsedinov · 2025-12-10
- В браузере Web Crypto API позволяет шифровать данные перед отправкой на сервер (асимметрично — сервер читает, но не меняет; или сервер вообще не расшифрует приватные данные).