In dieser Frage muss Erik ein sicheres zufälliges Token in Node.js generieren. Es gibt die Methode crypto.randomBytes
, die einen zufälligen Puffer generiert. Die Base64-Codierung im Knoten ist jedoch nicht url-sicher, sondern enthält /
und +
anstelle von -
und _
. Daher ist der einfachste Weg, ein solches Token zu generieren, das ich gefunden habe, der
require('crypto').randomBytes(48, function(ex, buf) {
token = buf.toString('base64').replace(/\//g,'_').replace(/\+/g,'-');
});
Gibt es einen eleganteren Weg?
javascript
node.js
base64
securestring
Hubert OG
quelle
quelle
'a-zA-Z0-9_-'
) ähnelt .Antworten:
Versuchen Sie crypto.randomBytes () :
Die 'Hex'-Codierung funktioniert in Knoten v0.6.x oder neuer.
quelle
node -e "require('crypto').randomBytes(48, function(ex, buf) { console.log(buf.toString('hex')) });"
buf.toString('base64')
eine Base64-codierte Nummer erhalten.Synchrone Option für den Fall, dass Sie kein JS-Experte wie ich sind. Musste einige Zeit damit verbringen, auf die Inline-Funktionsvariable zuzugreifen
quelle
const generateToken = (): Promise<string> => new Promise(resolve => randomBytes(48, (err, buffer) => resolve(buffer.toString('hex'))));
0. Verwenden einer Nanoid-Drittanbieter-Bibliothek [NEU!]
https://github.com/ai/nanoid
1. Base 64-Codierung mit URL und Dateiname Safe Alphabet
Seite 7 von RCF 4648 beschreibt, wie in Base 64 mit URL-Sicherheit codiert wird. Sie können eine vorhandene Bibliothek wie base64url verwenden , um die Aufgabe zu erledigen.
Die Funktion wird sein:
Anwendungsbeispiel:
Beachten Sie, dass die zurückgegebene Zeichenfolgenlänge nicht mit dem Größenargument übereinstimmt (Größe! = Endlänge).
2. Krypto-Zufallswerte aus einem begrenzten Zeichensatz
Sie können auch eine starke zufällige Zeichenfolge aus einer begrenzten Anzahl solcher Zeichen erstellen:
Anwendungsbeispiel:
quelle
Der aktuell richtige Weg , dies asynchron unter Verwendung der ES 2016-Standards für Async und Warten (ab Knoten 7) zu tun, wäre der folgende:
Dies funktioniert sofort in Knoten 7 ohne Babel-Transformationen
quelle
Zufällige URL und Dateinamenzeichenfolge sicher (1 Liner)
quelle
Auschecken:
quelle
ceil
undslice
für die gewünschten ungeraden Längen erforderlich. Für gerade Längen ändern sie nichts.Mit Async / Warten und Versprechen .
Erzeugt etwas Ähnliches wie
VjocVHdFiz5vGHnlnwqJKN0NdeHcz8eM
quelle
Schauen Sie sich
real_ates
ES2016 an, es ist korrekter.ECMAScript 2016 (ES7) Weg
Generator / Ertragsweg
quelle
https://www.npmjs.com/package/crypto-extra hat eine Methode dafür :)
quelle
.randomString (length, charset)
(siehe Dokumentation ). So könnten Sie zum Beispiel Benutzercrypto.randomString(12)
.Das npm-Modul anyid bietet eine flexible API zum Generieren verschiedener Arten von Zeichenfolgen-IDs / .
So generieren Sie eine zufällige Zeichenfolge in A-Za-z0-9 mit 48 zufälligen Bytes:
So generieren Sie nur eine Zeichenfolge mit fester Länge, die mit zufälligen Bytes gefüllt ist:
Intern wird es verwendet
crypto.randomBytes()
, um zufällig zu generieren.quelle
Hier ist eine asynchrone Version, die wörtlich aus der Antwort von @Yves M. stammt
quelle
Einfache Funktion, mit der Sie ein Token erhalten, das URL-sicher ist und Base64-Codierung hat! Es ist eine Kombination aus 2 Antworten von oben.
quelle