Erstellen Sie ein zufälliges Token in Javascript basierend auf Benutzerdetails

Lesezeit: 3 Minuten

Benutzer-Avatar
Feuer

Ich möchte eine zufällige Zeichenfolge (Token) erstellen, mit der ein Benutzer identifiziert werden kann, während potenzielle Konflikte mit den Token anderer Benutzer vermieden werden.

Was ich dachte, war ein MD5-Hash von navigator.userAgent + new Date().getTime() um das Token zu generieren, aber das erfordert eine ganze Javascript-MD5-Bibliothek, um es zu hashen, was ich nicht wirklich tun möchte.

Es muss aus AZ/0-9 Zeichen bestehen und idealerweise nicht länger als 32 Zeichen sein. Ich bin offen für alle Ideen. Vielen Dank!

Nur zur Verdeutlichung, ich suche keinen Zufalls-String-Generator, der Zufalls-String muss aus den über Javascript verfügbaren Benutzerdetails generiert werden und kann auch Zeit verwenden, um potenzielle Konflikte zu vermeiden!

  • Wie Sie geschrieben haben, fällt mir nur eine Hash-Funktion ein. Vielleicht möchten Sie versuchen, etwas wie “Hash-Funktion Javascript” zu googeln, und vielleicht finden Sie etwas Leichtes

    – mkk

    16. Dezember 2011 um 10:00 Uhr


Sie könnten eine Zufallszahl generieren und in die Basis 36 umwandeln (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"

  • @fire: Ich denke, das führt praktisch nicht zu Konflikten. MD5 kann theoretisch auch Konflikte verursachen, aber darüber sollten Sie sich keine Sorgen machen müssen.

    – pimvdb

    16. Dezember 2011 um 9:57 Uhr


  • Es könnte Konflikte geben, wenn das Token durch jemandes eigene Browserinformationen + Ihre Methode generiert wurde, die besser wäre.

    – Feuer

    16. Dezember 2011 um 9:59 Uhr

  • @fire: Ich verstehe deinen Punkt nicht ganz. navigator.userAgent ist nicht für jeden einzigartig, also macht es es nicht kugelsicher.

    – pimvdb

    16. Dezember 2011 um 10:03 Uhr


  • Entfernen radix (36) Parameter aus .toString in rand Die Funktion gibt Ihnen einen rein numerischen Hash – falls jemand so etwas haben möchte: return Math.random().toString().substr(2);

    – trejder

    28. September 2012 um 20:23 Uhr

  • Mann, ich liebe einen süßen Einzeiler!

    – Grogu

    5. Mai um 20:45 Uhr

Mit dieser Funktion können Sie die Token-Länge und die zulässigen Zeichen festlegen.

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("");
}

Rufen Sie einfach generate_token auf

generate_token(32); //returns "qweQj4giRJSdMNzB8g1XIa6t3YtRIHPH"

  • Die andere Antwort ist kleiner und schneller, aber ich mag die Tatsache, dass Sie hier die Länge und die zulässigen Zeichen auswählen können.

    – Guilherme Orioli

    12. März 2020 um 13:50 Uhr

//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

Benutzer-Avatar
Dieser Clark

Ich verwende einen ähnlichen Ansatz wie Kareem, aber mit weniger Funktionsaufrufen und integrierten Array-Operationen für eine große Leistungssteigerung.

Laut a Leistungstest, diese Methode übertrifft auch die akzeptierte Antwort um einen kleinen Rand. Außerdem liefert es einen Parameter n Token beliebiger Länge aus einer weißen Liste akzeptabler Zeichen zu generieren. Es ist flexibel und funktioniert gut.

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;
}

Kasse crypto.js Projekt. Es ist eine Sammlung von kryptografischen Algorithmen. Das Projekt verfügt über separate js-Dateien für jeden Hash-Algorithmus.

  • Ok, ich habe mich damit abgefunden, MD5 zu verwenden, Krypto sieht aus wie eine kleine Bibliothek, danke!

    – Feuer

    16. Dezember 2011 um 11:17 Uhr

  • Benutze kein md5. Es ist nicht stoßfest.

    – Niels Abildgaard

    17. Februar 2015 um 9:42 Uhr

Es ist sehr unwahrscheinlich, aber Math.random() könnte zurückkehren 0.0. In diesem Fall würde die Lösung von pimvdb zurückkehren "" (leerer String). Hier ist also eine andere Lösung, die in jedem Fall eine zufällige Base36 mit 10 Zeichen Länge zurückgibt:

function generateToken() {
    return Math.floor(1000000000000000 + Math.random() * 9000000000000000)
          .toString(36).substr(0, 10)
}

  • Ok, ich habe mich damit abgefunden, MD5 zu verwenden, Krypto sieht aus wie eine kleine Bibliothek, danke!

    – Feuer

    16. Dezember 2011 um 11:17 Uhr

  • Benutze kein md5. Es ist nicht stoßfest.

    – Niels Abildgaard

    17. Februar 2015 um 9:42 Uhr

1217410cookie-checkErstellen Sie ein zufälliges Token in Javascript basierend auf Benutzerdetails

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy