В этом вопросе Эрику нужно создать безопасный случайный токен в Node.js. Есть метод, crypto.randomBytes
который генерирует случайный буфер. Однако кодировка base64 в узле не является url-безопасной, она включает в себя /
и +
вместо -
и _
. Поэтому самый простой способ сгенерировать такой токен, который я нашел, это
require('crypto').randomBytes(48, function(ex, buf) {
token = buf.toString('base64').replace(/\//g,'_').replace(/\+/g,'-');
});
Есть ли более элегантный способ?
javascript
node.js
base64
securestring
Юбер О.Г.
источник
источник
'a-zA-Z0-9_-'
).Ответы:
Попробуйте crypto.randomBytes () :
Шестнадцатеричное кодирование работает в узле v0.6.x или новее.
источник
node -e "require('crypto').randomBytes(48, function(ex, buf) { console.log(buf.toString('hex')) });"
buf.toString('base64')
чтобы получить кодированный Base64 номер.Синхронный вариант в случае, если вы не являетесь экспертом JS, как я. Пришлось потратить некоторое время на то, как получить доступ к встроенной переменной функции
источник
const generateToken = (): Promise<string> => new Promise(resolve => randomBytes(48, (err, buffer) => resolve(buffer.toString('hex'))));
0. Использование сторонней библиотеки наноидов [NEW!]
https://github.com/ai/nanoid
1. Кодировка Base 64 с URL и именем файла Безопасный алфавит
Страница 7 из RCF 4648 описывает, как кодировать в базе 64 с безопасностью URL. Вы можете использовать существующую библиотеку, такую как base64url, чтобы сделать эту работу.
Функция будет:
Пример использования:
Обратите внимание, что возвращаемая длина строки не будет соответствовать аргументу размера (размер! = Конечная длина).
2. Криптослучайные значения из ограниченного набора символов
Вы также можете создать сильную случайную строку из ограниченного набора символов:
Пример использования:
источник
Современный правильный способ сделать это асинхронно с использованием стандартов ES 2016 async и await (начиная с узла 7) будет следующим:
Это работает из коробки в Node 7 без каких-либо преобразований Вавилона
источник
Случайный URL и имя файла безопасны (1 строка)
источник
Проверять, выписываться:
источник
ceil
иslice
вызовов необходимы для желаемой длины, четные. Даже для длины они ничего не меняют.С асинхронным ожиданием и обещанием .
Создает что-то похожее на
VjocVHdFiz5vGHnlnwqJKN0NdeHcz8eM
источник
Посмотрите на
real_ates
ES2016, это более правильно.ECMAScript 2016 (ES7) путь
Генератор / Путь Дохода
источник
https://www.npmjs.com/package/crypto-extra имеет метод для этого :)
источник
.randomString (length, charset)
(см. Документацию ). Таким образом, вы можете использовать, напримерcrypto.randomString(12)
.Модуль npm anyid предоставляет гибкий API для генерации различных типов идентификаторов / кодов строк.
Чтобы сгенерировать случайную строку в A-Za-z0-9, используя 48 случайных байтов:
Чтобы сгенерировать только алфавит фиксированной длины, строку, заполненную случайными байтами:
Внутренне он использует
crypto.randomBytes()
для генерации случайных.источник
Вот асинхронная версия, взятая дословно сверху @Yves M. ответ
источник
Простая функция, которая дает вам токен, который безопасен для URL и имеет кодировку base64! Это комбинация из 2 ответов сверху.
источник