Créer un jeton aléatoire en Javascript basé sur les détails de l'utilisateur
Je veux créer une chaîne aléatoire (jeton) qui peut être utilisée pour identifier un utilisateur tout en évitant tout conflit potentiel avec les Jetons des autres utilisateurs.
Ce à quoi je pensais était un hachage MD5 de navigator.userAgent + new Date().getTime()
pour générer le jeton, mais cela nécessite toute une bibliothèque Javascript MD5 pour le hacher, ce que je ne veux pas vraiment faire.
Il doit être composé de A-Z / 0-9 caractères et idéalement pas plus de 32 caractères. Je suis ouvert à toutes les idées. Merci!
Juste pour clarifier, je ne suis pas vous recherchez un générateur de chaîne aléatoire, la chaîne aléatoire doit être générée à partir des détails des utilisateurs disponibles via Javascript et peut également utiliser le temps pour éviter les conflits potentiels!
6 réponses
Commander crypto.projet js. C'est une collection d'algorithmes cryptographiques. Le projet a des fichiers JS séparés pour chaque algorithme de hachage.
Vous pouvez générer un nombre aléatoire et le convertir en base 36 (0-9a-z
):
var rand = function() {
return Math.random().toString(36).substr(2); // remove `0.`
};
var token = function() {
return rand() + rand(); // to make it longer
};
token(); // "bnh5yzdirjinqaorq0ox1tf383nb3xr"
Cette fonction vous permet de définir la longueur du jeton et les caractères autorisés.
function generate_token(length){
//edit the token allowed characters
var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".split("");
var b = [];
for (var i=0; i<length; i++) {
var j = (Math.random() * (a.length-1)).toFixed(0);
b[i] = a[j];
}
return b.join("");
}
Appelez Simplement generate_token
generate_token(32); //returns "qweQj4giRJSdMNzB8g1XIa6t3YtRIHPH"
Il est très peu probable, mais les mathématiques.random() pourrait renvoyer 0.0
. Dans ce cas, la solution de pimvdb retournerait ""
(chaîne vide). Donc, voici une autre solution, qui renvoie dans tous les cas un base36 aléatoire avec une longueur de 10 caractères:
function generateToken() {
Math.floor(1000000000000000 + Math.random() * 9000000000000000)
.toString(36).substr(0, 10)
}
//length: defines the length of characters to express in the string
const rand=()=>Math.random(0).toString(36).substr(2);
const token=(length)=>(rand()+rand()+rand()+rand()).substr(0,length);
console.log(token(40));
//example1: token(10) => result: tsywlmdqu6
//example2: token(40) => result: m4vni14mtln2547gy54ksclhcv0dj6tp9fhs1k10
J'utilise une approche similaire à de Kareem, mais avec moins d'appels de fonction et d'opérations de tableau intégrées pour un gros coup de pouce dans les performances.
Selon un test de performance , cette méthode surpasse également la réponse acceptée d'une petite marge. De plus, il fournit un paramètre n
pour générer n'importe quelle longueur de jeton de taille à partir d'une liste blanche de caractères acceptables. Il est flexible et fonctionne bien.
function generateToken(n) {
var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var token = '';
for(var i = 0; i < n; i++) {
token += chars[Math.floor(Math.random() * chars.length)];
}
return token;
}