Em esta questão Erik precisa para gerar um token aleatório seguro em Node.js. Existe o método crypto.randomBytes
que gera um buffer aleatório. No entanto, a codificação base64 no nó não é segura para URL, inclui /
e em +
vez de -
e _
. Portanto, a maneira mais fácil de gerar esse token que encontrei é
require('crypto').randomBytes(48, function(ex, buf) {
token = buf.toString('base64').replace(/\//g,'_').replace(/\+/g,'-');
});
Existe uma maneira mais elegante?
javascript
node.js
base64
securestring
Hubert OG
fonte
fonte
'a-zA-Z0-9_-'
).Respostas:
Tente crypto.randomBytes () :
A codificação 'hex' funciona no nó v0.6.x ou mais recente.
fonte
node -e "require('crypto').randomBytes(48, function(ex, buf) { console.log(buf.toString('hex')) });"
buf.toString('base64')
para obter um número codificado em Base64.Opção síncrona, caso você não seja um especialista em JS como eu. Tive que gastar algum tempo em como acessar a variável de função inline
fonte
const generateToken = (): Promise<string> => new Promise(resolve => randomBytes(48, (err, buffer) => resolve(buffer.toString('hex'))));
0. Usando a biblioteca de terceiros nanoid [NEW!]
https://github.com/ai/nanoid
1. Codificação Base 64 com URL e Alfabeto Seguro de Nome de Arquivo
A página 7 do RCF 4648 descreve como codificar na base 64 com segurança de URL. Você pode usar uma biblioteca existente como base64url para fazer o trabalho.
A função será:
Exemplo de uso:
Observe que o comprimento da string retornada não corresponderá ao argumento size (size! = Length final).
2. Valores aleatórios criptográficos a partir de um conjunto limitado de caracteres
Você também pode criar uma sequência aleatória forte a partir de um conjunto limitado de caracteres assim:
Exemplo de uso:
fonte
A maneira correta e atualizada de fazer isso de forma assíncrona usando os padrões ES 2016 de assíncrono e aguardar (no Nó 7) seria o seguinte:
Isso funciona imediatamente no nó 7 sem nenhuma transformação Babel
fonte
URL aleatória e string de nome de arquivo segura (1 liner)
fonte
Verificação de saída:
fonte
ceil
eslice
são necessárias para os comprimentos desejados que são ímpares. Por comprimentos uniformes, eles não mudam nada.Com async / wait e promisification .
Gera algo semelhante a
VjocVHdFiz5vGHnlnwqJKN0NdeHcz8eM
fonte
Olhe para o
real_ates
ES2016, é mais correto.Maneira do ECMAScript 2016 (ES7)
Maneira do gerador / rendimento
fonte
https://www.npmjs.com/package/crypto-extra possui um método para isso :)
fonte
.randomString (length, charset)
(consulte a documentação ). Então você pode usar, por exemplocrypto.randomString(12)
.O módulo npm anyid fornece API flexível para gerar vários tipos de ID / código de string.
Para gerar uma sequência aleatória em A-Za-z0-9 usando 48 bytes aleatórios:
Para gerar apenas um alfabeto de comprimento fixo, sequência preenchida por bytes aleatórios:
Internamente, ele usa
crypto.randomBytes()
para gerar aleatoriamente.fonte
Aqui está uma versão assíncrona tirada literalmente de cima da resposta de @Yves M.
fonte
Função simples que fornece a você um token que é seguro para URL e possui codificação base64! É uma combinação de 2 respostas acima.
fonte