JavaScript crypto.getRandomValues() — криптостійкі випадкові числа


Метод crypto.getRandomValues() заповнює типізований масив криптостійкими випадковими числами.

автор: NagarD

Загальний опис

Різниця з Math.random() не в «якості випадковості» абстрактно, а в передбачуваності. Math.random() — це швидкий алгоритм зі станом; знаючи кілька його виходів, наступні можна обчислити.

Для перемішування карток у грі це неважливо. Для токена скидання пароля, ключа сеансу чи солі — фатально.

Правило просте: усе, що має бути неможливо вгадати, генерується тільки тут.

Масив заповнюється на місці; він же й повертається.

автор: NagarD

Порада

Питання, яке варто ставити щоразу: «якщо хтось передбачить це число, що станеться?». Якщо відповідь неприємна — Math.random() не годиться.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
getRandomValues 11+ 21+ 5.1+ 15+ 12+ 11+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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)
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід