JavaScript crypto.getRandomValues() — криптостійкі випадкові числа
Метод crypto.getRandomValues() заповнює типізований масив криптостійкими випадковими числами.
Загальний опис
Різниця з Math.random() не в «якості випадковості» абстрактно, а в передбачуваності. Math.random() — це швидкий алгоритм зі станом; знаючи кілька його виходів, наступні можна обчислити.
Для перемішування карток у грі це неважливо. Для токена скидання пароля, ключа сеансу чи солі — фатально.
Правило просте: усе, що має бути неможливо вгадати, генерується тільки тут.
Масив заповнюється на місці; він же й повертається.
автор: NagarD
- Порада
-
Питання, яке варто ставити щоразу: «якщо хтось передбачить це число, що станеться?». Якщо відповідь неприємна —
автор: NagarDMath.random()не годиться.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 11 | 21 | 5 | 15 | 12 | 11 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 18 | 21 | 5 |
| Переглядач | ||
|---|---|---|
| 15.0.0 | 1.0 |
Приклади
+ запропонувати свій приклад у пісочниці
Токен, який неможливо вгадати.
// 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)
Коментарі
Коментарів ще немає — будьте першим!