Dans cette question, Erik doit générer un jeton aléatoire sécurisé dans Node.js. Il y a la méthode crypto.randomBytes
qui génère un tampon aléatoire. Cependant, le codage base64 dans le nœud n'est pas sûr pour les URL, il inclut /
et +
au lieu de -
et _
. Par conséquent, le moyen le plus simple de générer un tel jeton que j'ai trouvé est
require('crypto').randomBytes(48, function(ex, buf) {
token = buf.toString('base64').replace(/\//g,'_').replace(/\+/g,'-');
});
Existe-t-il une manière plus élégante?
javascript
node.js
base64
securestring
Hubert OG
la source
la source
'a-zA-Z0-9_-'
).Réponses:
Essayez crypto.randomBytes () :
L'encodage «hexadécimal» fonctionne dans le nœud v0.6.x ou plus récent.
la source
node -e "require('crypto').randomBytes(48, function(ex, buf) { console.log(buf.toString('hex')) });"
buf.toString('base64')
pour obtenir un numéro codé en Base64.Option synchrone au cas où vous n'êtes pas un expert JS comme moi. J'ai dû passer un peu de temps sur la façon d'accéder à la variable de fonction en ligne
la source
const generateToken = (): Promise<string> => new Promise(resolve => randomBytes(48, (err, buffer) => resolve(buffer.toString('hex'))));
0. Utilisation d'une bibliothèque tierce nanoïde [NOUVEAU!]
https://github.com/ai/nanoid
1. Encodage Base 64 avec URL et nom de fichier Safe Alphabet
La page 7 du RCF 4648 décrit comment coder en base 64 avec la sécurité des URL. Vous pouvez utiliser une bibliothèque existante comme base64url pour faire le travail.
La fonction sera:
Exemple d'utilisation:
Notez que la longueur de chaîne retournée ne correspondra pas à l'argument taille (taille! = Longueur finale).
2. Valeurs aléatoires cryptographiques d'un ensemble limité de caractères
Vous pouvez également créer une chaîne aléatoire forte à partir d'un ensemble limité de caractères comme celui-ci:
Exemple d'utilisation:
la source
La bonne façon à jour de le faire de manière asynchrone en utilisant les normes ES 2016 d'async et d'attente (à partir du nœud 7) serait la suivante:
Cela fonctionne hors de la boîte dans le nœud 7 sans aucune transformation Babel
la source
URL aléatoire et chaîne de nom de fichier sécurisée (1 doublure)
la source
Check-out:
la source
ceil
etslice
sont nécessaires pour les longueurs désirées qui sont impaires. Pour des longueurs égales, ils ne changent rien.Avec async / wait et promisification .
Génère quelque chose de similaire à
VjocVHdFiz5vGHnlnwqJKN0NdeHcz8eM
la source
Regardez la
real_ates
manière ES2016, c'est plus correct.ECMAScript 2016 (ES7) façon
Générateur / rendement
la source
https://www.npmjs.com/package/crypto-extra a une méthode pour cela :)
la source
.randomString (length, charset)
(voir la documentation ). Vous pouvez donc utiliser par exemplecrypto.randomString(12)
.Le module npm anyid fournit une API flexible pour générer différents types d'ID / code de chaîne.
Pour générer une chaîne aléatoire dans A-Za-z0-9 en utilisant 48 octets aléatoires:
Pour générer uniquement une chaîne d'alphabet de longueur fixe remplie d'octets aléatoires:
En interne, il utilise
crypto.randomBytes()
pour générer de façon aléatoire.la source
Voici une version asynchrone prise mot pour mot d'en haut @Yves M.'s answer
la source
Fonction simple qui vous permet d'obtenir un jeton sûr pour les URL et doté d'un encodage base64! C'est une combinaison de 2 réponses d'en haut.
la source