Cómo generar una contraseña aleatoria de 6 dígitos en node.js usando randomBytes ()

Estoy tratando de generar exactamente 6 dígitos aleatorios en Node.js, que debe ser criptográficamente seguro. Aquí está mi código:

 var crypto = require('crypto'); crypto.randomBytes(2, function(err, buffer) { console.log(parseInt(buffer.toString('hex'), 16)); }); 

El problema es que el resultado de esto puede ser de 4 o 5 dígitos, porque estamos convirtiendo de hexadecimal a decimal. ¿Hay alguna manera de mantener la función criptográfica segura randomBytes() , pero garantizar un resultado de 6 dígitos?

Los 2 bytes tienen un valor máximo de 65535, por lo que nunca obtendrás 6 dígitos si solo usas 2 bytes.

Use 3 bytes en su lugar y luego redúzcalo a 6 dígitos usando substr :

 var crypto = require('crypto'); crypto.randomBytes(3, function(err, buffer) { console.log(parseInt(buffer.toString('hex'), 16).toString().substr(0,6)); }); 

Otra solución sería ejecutar randomBytes hasta obtener un valor de 6 dígitos:

 var crypto = require('crypto'); var secureVal = 0; function generateSecureVal(cb) { crypto.randomBytes(3, function(err, buffer) { secureVal = parseInt(buffer.toString('hex'), 16); if (secureVal > 999999 || secureVal < 100000) { generateSecureVal(cb); } else { cb(); } }); } generateSecureVal(function(){ console.log(secureVal); }); 

El problema con lo anterior es que, en teoría, podría atascarse en un bucle interminable, y lo más probable es que utilice más ciclos de CPU que el primer ejemplo.

    Intereting Posts