JavaScript Crypto — випадкові числа й хешування
Crypto (глобальний об'єкт crypto) дає криптостійку випадковість і доступ до справжньої криптографії: хешування, шифрування, підписи.
Загальний опис
Найчастіше з нього беруть дві речі, і обидві — однорядкові.
crypto.randomUUID() повертає готовий унікальний ідентифікатор. crypto.getRandomValues() заповнює масив випадковими байтами — на відміну від Math.random(), який передбачуваний і для будь-чого, пов'язаного з безпекою (токени, паролі, солі), не годиться категорично.
Глибша частина — crypto.subtle: хешування SHA-256, шифрування AES, підписи. Усі його методи асинхронні (повертають проміси) і приймають байти, а не рядки — тож у парі з ним завжди йде TextEncoder.
- Нотатка
-
автор: NagarDcrypto.subtleдоступний лише в захищеному контексті — тобто на HTTPS або наlocalhost. На звичайному HTTP його просто немає.
Синтаксис
crypto.randomUUID();
методи
| Метод | Опис |
|---|---|
| randomUUID | Генерує випадковий UUID v4. |
| getRandomValues | Заповнює типізований масив криптостійкими випадковими числами. |
властивості
| Властивість | Опис |
|---|---|
| subtle | Web Crypto API: хешування, підписи, шифрування. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| Crypto | 37+ | 34+ | 11+ | 24+ | 12+ | 11+ |
| Переглядач | ||||
|---|---|---|---|---|
| Crypto | 37+ | yes | yes | 11+ |
Приклади
+ запропонувати свій приклад у пісочниці
Унікальний id, криптостійкий токен і хеш SHA-256.
// готовий унікальний id
console.log(crypto.randomUUID());
// випадкові байти — не Math.random()!
const bytes = crypto.getRandomValues(new Uint8Array(16));
const token = [...bytes].map(b => b.toString(16).padStart(2, '0')).join('');
console.log(token);
// хеш SHA-256 (лише на HTTPS або localhost)
async function sha256(text) {
const data = new TextEncoder().encode(text);
const hash = await crypto.subtle.digest('SHA-256', data);
return [...new Uint8Array(hash)]
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
sha256('привіт').then(hash => console.log('SHA-256:', hash));
Коментарі
Коментарів ще немає — будьте першим!