En esta pregunta, Erik necesita generar un token aleatorio seguro en Node.js. Existe el método crypto.randomBytes
que genera un búfer aleatorio. Sin embargo, la codificación base64 en el nodo no es segura para URL, incluye /
y en +
lugar de -
y _
. Por lo tanto, la forma más fácil de generar ese token que he encontrado es
require('crypto').randomBytes(48, function(ex, buf) {
token = buf.toString('base64').replace(/\//g,'_').replace(/\+/g,'-');
});
¿Hay alguna forma más elegante?
javascript
node.js
base64
securestring
Hubert OG
fuente
fuente
'a-zA-Z0-9_-'
).Respuestas:
Prueba crypto.randomBytes () :
La codificación 'hexadecimal' funciona en el nodo v0.6.xo posterior.
fuente
node -e "require('crypto').randomBytes(48, function(ex, buf) { console.log(buf.toString('hex')) });"
buf.toString('base64')
para obtener un número codificado en Base64.Opción síncrona en caso de que no sea un experto en JS como yo. Tuve que pasar algún tiempo sobre cómo acceder a la variable de función en línea
fuente
const generateToken = (): Promise<string> => new Promise(resolve => randomBytes(48, (err, buffer) => resolve(buffer.toString('hex'))));
0. Uso de la biblioteca de terceros nanoid [¡NUEVO!]
https://github.com/ai/nanoid
1. Codificación Base 64 con alfabeto seguro de URL y nombre de archivo
La página 7 de RCF 4648 describe cómo codificar en base 64 con seguridad de URL. Puede usar una biblioteca existente como base64url para hacer el trabajo.
La función será:
Ejemplo de uso:
Tenga en cuenta que la longitud de la cadena devuelta no coincidirá con el argumento de tamaño (tamaño! = Longitud final).
2. Valores criptográficos aleatorios de un conjunto limitado de caracteres
También puede crear una cadena aleatoria fuerte a partir de un conjunto limitado de caracteres como ese:
Ejemplo de uso:
fuente
La forma correcta y actualizada de hacer esto de forma asíncrona utilizando los estándares ES 2016 de asíncrono y espera (a partir del Nodo 7) sería la siguiente:
Esto funciona de forma inmediata en el Nodo 7 sin ninguna transformación de Babel
fuente
URL aleatoria y cadena de nombre de archivo segura (1 liner)
fuente
Revisa:
fuente
ceil
yslice
son necesarias para las longitudes deseadas que son extrañas. Para longitudes pares, no cambian nada.Con asíncrono / espera y promisificación .
Genera algo similar a
VjocVHdFiz5vGHnlnwqJKN0NdeHcz8eM
fuente
Mire la
real_ates
forma ES2016, es más correcto.Forma ECMAScript 2016 (ES7)
Generador / Rendimiento
fuente
https://www.npmjs.com/package/crypto-extra tiene un método para ello :)
fuente
.randomString (length, charset)
(ver documentación ). Entonces podrías usar, por ejemplocrypto.randomString(12)
.El módulo nid anyid proporciona una API flexible para generar varios tipos de ID / código de cadena.
Para generar una cadena aleatoria en A-Za-z0-9 usando 48 bytes aleatorios:
Para generar una cadena de alfabeto de longitud fija solo llena por bytes aleatorios:
Internamente se utiliza
crypto.randomBytes()
para generar al azar.fuente
Aquí hay una versión asíncrona tomada literalmente de arriba Respuesta de @Yves M.
fuente
¡Función simple que le proporciona un token que es seguro para URL y tiene codificación base64! Es una combinación de 2 respuestas de arriba.
fuente