JavaScript crypto.getRandomValues() — криптостійкі випадкові числа
Метод crypto.getRandomValues() заповнює типізований масив криптостійкими випадковими числами.
Загальний опис
Різниця з Math.random() не в «якості випадковості» абстрактно, а в передбачуваності. Math.random() — це швидкий алгоритм зі станом; знаючи кілька його виходів, наступні можна обчислити.
Для перемішування карток у грі це неважливо. Для токена скидання пароля, ключа сеансу чи солі — фатально.
Правило просте: усе, що має бути неможливо вгадати, генерується тільки тут.
Масив заповнюється на місці; він же й повертається.
автор: NagarD
- Порада
-
Питання, яке варто ставити щоразу: «якщо хтось передбачить це число, що станеться?». Якщо відповідь неприємна —
автор: NagarDMath.random()не годиться.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| getRandomValues | 11+ | 21+ | 5.1+ | 15+ | 12+ | 11+ |
| Переглядач | ||||
|---|---|---|---|---|
| getRandomValues | 4.4+ | yes | yes | 6+ |
Приклади
+ запропонувати свій приклад у пісочниці
Токен, який неможливо вгадати.
// 16 випадкових байтів
const bytes = crypto.getRandomValues(new Uint8Array(16));
// у шістнадцятковий рядок
const token = [...bytes]
.map(b => b.toString(16).padStart(2, '0'))
.join('');
console.log(token); // '3f5a...'
// випадкове число в діапазоні — теж чесно
const n = crypto.getRandomValues(new Uint32Array(1))[0] % 100;
// а це для токенів НЕ можна:
// Math.random().toString(36)
Коментарі
Коментарів ще немає — будьте першим!