2016-07-01 1 views
0

Ich versuche einzigartige Schlüssel/Token in Expressjs zu generieren. Ich benutze . Aber der Schlüssel ist es Buchstaben in Zahlen und Klein erzeugt:Generieren von API-Tokens mit Knoten - Groß- und Kleinbuchstaben und Zahlen?

1b1a7af4e304fc0fa49216ce248ae574 

Mein Code:

var express = require('express'); 
var hat = require("hat"); 
var app = express(); 

app.get('/', function (req, res) { 
    res.send(hat()); 
}); 

Aber ich ziehe Tasten wie diese (Mischung aus Groß- und Kleinschreibung und Zahlen):

EzpoQlgvQESADxzAQX94uwPgoYX 

Irgendwelche Ideen, welches Knotenpaket ich verwenden sollte, um Schlüssel wie das (Mischung aus Klein- und Großbuchstaben und Zahlen) zu erstellen?

Was sind die Unterschiede zwischen diesen beiden Arten von Schlüsseln? Was ist sicherer und besser?

Antwort

1

Soweit einzigartige Schlüssel in dieser Form zu erzeugen bin ich nicht sicher, eine Bibliothek, aber die einfachste Lösung könnte mit einem Drittanbieter-Code zu tun weg und verwenden Sie einen Einzeiler wie var key = require('crypto').randomBytes(64).toString('base64');, die Sie Ebenso gute Ergebnisse, mit denen Sie Ihre Kollisionswahrscheinlichkeit steuern und Ihre Schlüssel anpassen können.

Wie für Ihre zweite Frage, die besser ist, hängt es von Ihrer Einstufung von besser.

Das Hauptziel für Schlüssel wie dieses ist ihr Niveau von entropy. In sehr einfachen Worten, Großbuchstaben und Kleinbuchstaben und Zahlen würden die Entropie pro Buchstabe auf 62 mögliche Kombinationen erhöhen, während nur Kleinbuchstaben und Zahlen 36 Kombinationen hätten.

Dies bedeutet, soweit Entropie betroffen ist, wieder einfache Begriffe, wäre ein 62 Zeichen Kleinbuchstaben + Nummer Schlüssel so effektiv wie eine 36 Zeichen lang Großbuchstaben + Kleinbuchstaben + Zifferntaste.

Während kürzere Tasten für Ihre Situation (oder Vorliebe?) Nützlich sein könnten, könnten Sie Probleme bei verschiedenen Technologien feststellen, bei denen die Groß- und Kleinschreibung nicht beachtet werden muss.

+0

Danke für die Antwort. 'crypto' ist eine Knotenbibliothek, richtig? https://www.npmjs.com/package/crypto-js – laukok

+1

Ja, sein Kern, so können Sie 'require ('crypto'). randomBytes (64) .toString ('base64');' ohne zu verwenden installiere alles. (Aktualisierte Antwort zu passen) –

+1

Ja, war nur eine schnelle Lösung, aber wenn Sie daran interessiert waren, es zu verwenden, könnten Sie etwas wie 'require ('crypto'). RandomBytes (64) .toString ('base64'). Ersetzen (/ [^ A-Za-z0-9]/g, "") .substring (0,16) ', um Ihnen eine Zeichenfolge mit 16 Zeichen mit nur alphanumerischen Zeichen zu geben. Dies ist natürlich keine angemessene sicherheitsbewusste Methode obwohl –

Verwandte Themen