Gere uma string de senha aleatória com requisitos em javascript

94

Quero gerar uma string aleatória que deve ter 5 letras de az e 3 números.

Como posso fazer isso com JavaScript?

Eu tenho o seguinte script, mas não atende aos meus requisitos.

        var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        var string_length = 8;
        var randomstring = '';
        for (var i=0; i<string_length; i++) {
            var rnum = Math.floor(Math.random() * chars.length);
            randomstring += chars.substring(rnum,rnum+1);
        }
ffffff01
fonte
6
Se atender às suas necessidades, qual é a pergunta então? Além disso, sua solicitação de senha forçada é uma má ideia.
Rob W
7
xkcd.com/936
MatuDuke
2
new Array(12).fill().map(() => String.fromCharCode(Math.random()*86+40)).join("") Nifty one liner para produzir uma senha de 12 caracteres com caracteres especiais superiores e números inferiores em uma abordagem muito leve
Tofandel

Respostas:

309

Forçar um número fixo de caracteres é uma ideia. Isso não melhora a qualidade da senha. Pior, ele reduz o número de senhas possíveis, de forma que hackear por força bruta se torna mais fácil.

Para gerar uma palavra aleatória consistindo em caracteres alfanuméricos, use:

var randomstring = Math.random().toString(36).slice(-8);

Como funciona?

Math.random()                        // Generate random number, eg: 0.123456
             .toString(36)           // Convert  to base-36 : "0.4fzyo82mvyr"
                          .slice(-8);// Cut off last 8 characters : "yo82mvyr"

Documentação para os métodos Number.prototype.toStringe string.prototype.slice.

Rob W
fonte
6
Eu concordo, mas às vezes você não consegue decidir;)
ffffff01
38
NÃO USE ISTO: Como o número é convertido de binário para decimal, e não há bits suficientes para "preencher" o espaço decimal completo, o último dígito só será selecionado a partir de um determinado conjunto de valores. Por exemplo, no meu computador, o último dígito é sempre "i", "r" e "9". Em vez disso, use:Math.random().toString(36).substr(2, 8)
Joel de
1
Para explicar o que 36 faz: From mozilla O método toString () analisa seu primeiro argumento e tenta retornar uma representação de string na raiz especificada (base). Para radicais acima de 10, as letras do alfabeto indicam numerais maiores que 9. Por exemplo, para números hexadecimais (base 16), a até f são usados. Portanto, de acordo com isso, usando o radical 36, obtemos az após 0-9.
Shishir Gupta
2
@ShishirGupta .toStringsó aceita uma base de até e incluindo 36. Esta resposta pretende ser uma linha única para uma string aleatória não criptográfica. Se você quiser ter letras maiúsculas também, use Math.random(ou crypto.getRandomValuesse disponível) e mapeie o resultado para az, AZ, 0-9. Por exemplo, usando a resposta de saaj abaixo.
Rob W
1
Não vendo como isso atende ao requisito de OP "5 letras de az e 3 números" . Eu entendi, o autor acha que é uma má ideia ... mas é o requisito, no entanto
mwag
38

Uma abordagem um pouco mais segura e sustentável.

var Password = {
 
  _pattern : /[a-zA-Z0-9_\-\+\.]/,
  
  
  _getRandomByte : function()
  {
    // http://caniuse.com/#feat=getrandomvalues
    if(window.crypto && window.crypto.getRandomValues) 
    {
      var result = new Uint8Array(1);
      window.crypto.getRandomValues(result);
      return result[0];
    }
    else if(window.msCrypto && window.msCrypto.getRandomValues) 
    {
      var result = new Uint8Array(1);
      window.msCrypto.getRandomValues(result);
      return result[0];
    }
    else
    {
      return Math.floor(Math.random() * 256);
    }
  },
  
  generate : function(length)
  {
    return Array.apply(null, {'length': length})
      .map(function()
      {
        var result;
        while(true) 
        {
          result = String.fromCharCode(this._getRandomByte());
          if(this._pattern.test(result))
          {
            return result;
          }
        }        
      }, this)
      .join('');  
  }    
    
};
<input type='text' id='p'/><br/>
<input type='button' value ='generate' onclick='document.getElementById("p").value = Password.generate(16)'>

saaj
fonte
Além disso, isso nem sempre adiciona um número ao código gerado e o OP quer no mínimo 3.
qwertzman
Encontrou uma biblioteca compatível com window.crypto.getRandomValues ​​e também funciona em node.js github.com/bermi/password-generator
Eugene
Só queria dizer que precisava de algo para gerar senhas rapidamente e isso era perfeito. Obrigado!
Kyle K de
29

Muitas respostas (incluindo a original desta) não atendem aos requisitos de contagem de letras e números do OP. Abaixo estão duas soluções: geral (sem letras / números mínimos) e com regras.

Geral:

Eu acredito que esta é uma solução geral melhor do que a acima, porque:

  • é mais seguro do que a resposta aceita / mais votada, e também mais versátil, porque suporta qualquer conjunto de caracteres diferenciando maiúsculas de minúsculas
  • é mais conciso do que outras respostas (para solução geral, 3 linhas no máximo; pode ser de uma linha)
  • ele usa apenas Javascript nativo - nenhuma instalação ou outras bibliotecas necessárias

Observe que

  • para que isso funcione no IE, o protótipo Array.fill () deve ser polyfilled
  • se disponível, melhor usar window.crypto.getRandomValues ​​() em vez de Math.random () (obrigado @BenjaminH por apontar)

Três linhas:

var pwdChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var pwdLen = 10;
var randPassword = Array(pwdLen).fill(pwdChars).map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('');

Ou, como uma linha:

var randPassword = Array(10).fill("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz").map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('');

Com regras de letras / números

Agora, uma variação do anterior. Isso irá gerar três strings aleatórias dos conjuntos de caracteres fornecidos (letra, número, qualquer um) e, em seguida, embaralhar o resultado.

Observe que o seguinte usa sort () apenas para fins ilustrativos. Para uso em produção, substitua a função sort () abaixo por uma função shuffle , como Durstenfeld .

Primeiro, como uma função:

function randPassword(letters, numbers, either) {
  var chars = [
   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", // letters
   "0123456789", // numbers
   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" // either
  ];

  return [letters, numbers, either].map(function(len, i) {
    return Array(len).fill(chars[i]).map(function(x) {
      return x[Math.floor(Math.random() * x.length)];
    }).join('');
  }).concat().join('').split('').sort(function(){
    return 0.5-Math.random();
  }).join('')
}

// invoke like so: randPassword(5,3,2);

A mesma coisa, que um 2-liner (reconhecidamente, linhas muito longas e feias - e não será um 1-liner se você usar uma função shuffle adequada. Não recomendado, mas às vezes é divertido de qualquer maneira):

var chars = ["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz","0123456789", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"];
var randPwd = [5,3,2].map(function(len, i) { return Array(len).fill(chars[i]).map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('') }).concat().join('').split('').sort(function(){return 0.5-Math.random()}).join('');
mwag
fonte
Boa resposta, mas a letra maiúscula Y nunca aparecerá em nenhuma senha que você gerar.
Ryan Shillington
1
Obrigado. Usei o conjunto de caracteres na pergunta do OP, mas parece que ele estava com defeito. Atualizado agora.
mwag de
Você diz "é mais seguro do que a resposta aceita / com maior votação". Você poderia explicar o motivo?
BenjaminH
Além disso, o uso de Math.random () pode ser previsível. Portanto, para gerar senhas, é melhor usar uma função como window.crypto.getRandomValues.
BenjaminH
2
A razão pela qual é mais seguro é porque ele suporta um número maior de caracteres possíveis na saída do que usar toString (36). Com um comprimento de saída fixo (por exemplo, 8), se você tiver um máximo de 36 caracteres para escolher, você terá muito menos permutações do que se tiver 62 caracteres (como no exemplo) ou melhor ainda, todos os 95 imprimíveis (ascii ) chars, ou se estiver usando Unicode, um número ainda maior de possibilidades por byte.
mwag de
10

Para quem procura um guião simples. Não while (true), não if/else, nenhuma declaração.

Baseie-se na resposta de mwag, mas esta usa crypto.getRandomValuesum aleatório mais forte do que Math.random.

Array(20)
  .fill('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$')
  .map(x => x[Math.floor(crypto.getRandomValues(new Uint32Array(1))[0] / (0xffffffff + 1) * x.length)])
  .join('');

Veja isso para 0xffffffff.

Alternativa 1

var generatePassword = (
  length = 20,
  wishlist = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$"
) => Array(length)
      .fill('')
      .map(() => wishlist[Math.floor(crypto.getRandomValues(new Uint32Array(1))[0] / (0xffffffff + 1) * wishlist.length)])
      .join('');

console.log(generatePassword());

Alternativa 2

var generatePassword = (
  length = 20,
  wishlist = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$'
) =>
  Array.from(crypto.getRandomValues(new Uint32Array(length)))
    .map((x) => wishlist[x % wishlist.length])
    .join('')

console.log(generatePassword())

Node.js

const crypto = require('crypto')

const generatePassword = (
  length = 20,
  wishlist = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$'
) =>
  Array.from(crypto.randomFillSync(new Uint32Array(length)))
    .map((x) => wishlist[x % wishlist.length])
    .join('')

console.log(generatePassword())
Ninh Pham
fonte
1
Isso não está fornecendo senhas de comprimento consistentemente 20, devido a um deslocamento indefinido. A + 1peça não é necessária e pode ser removida.
bryc
Boa captura @bryc. Atualizada. Obrigado.
Ninh Pham
1
Solução útil e fácil. Qualquer pessoa que queira fazer isso no NodeJS pode simplesmente substituir crypto.getRandomValuespor crypto.randomFillSync .
Rvy Pandey
Adicionada a versão Node.js. Obrigado @Rvy Pandey.
Ninh Pham
8

Isso não é exatamente otimizado, mas deve funcionar.

var chars = "ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 8;
var randomstring = '';
var charCount = 0;
var numCount = 0;

for (var i=0; i<string_length; i++) {
    // If random bit is 0, there are less than 3 digits already saved, and there are not already 5 characters saved, generate a numeric value. 
    if((Math.floor(Math.random() * 2) == 0) && numCount < 3 || charCount >= 5) {
        var rnum = Math.floor(Math.random() * 10);
        randomstring += rnum;
        numCount += 1;
    } else {
        // If any of the above criteria fail, go ahead and generate an alpha character from the chars string
        var rnum = Math.floor(Math.random() * chars.length);
        randomstring += chars.substring(rnum,rnum+1);
        charCount += 1;
    }
}

alert(randomstring);

​ ​ ​

Aqui está um jsfiddle para você testar em: http://jsfiddle.net/sJGW4/3/

Alec Sanger
fonte
1
chars.substring(rnum, rnum+1)é exatamente comochars.charAt(rnum)
Mad Echet
7

Caso você precise de uma senha gerada com pelo menos 1 número, 1 caractere maiúsculo e 1 caractere minúsculo:

function generatePassword(passwordLength) {
  var numberChars = "0123456789";
  var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var lowerChars = "abcdefghijklmnopqrstuvwxyz";
  var allChars = numberChars + upperChars + lowerChars;
  var randPasswordArray = Array(passwordLength);
  randPasswordArray[0] = numberChars;
  randPasswordArray[1] = upperChars;
  randPasswordArray[2] = lowerChars;
  randPasswordArray = randPasswordArray.fill(allChars, 3);
  return shuffleArray(randPasswordArray.map(function(x) { return x[Math.floor(Math.random() * x.length)] })).join('');
}

function shuffleArray(array) {
  for (var i = array.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  return array;
}

alert(generatePassword(12));

Aqui está o violino se você quiser jogar / testar: http://jsfiddle.net/sJGW4/155/

Apoio a @mwag por me dar o começo para criar isso.

Ryan Shillington
fonte
1
Estão faltando letras minúsculas j: P Caso contrário, coisas boas aqui. Porém, modifiquei um pouco para atender aos meus requisitos.
Igor Yavych de
7

Como @RobW observa, restringir a senha a um número fixo de caracteres como proposto no esquema OP é uma má ideia . Pior ainda, respostas que propõem código baseado em Math.randomsão, bem, uma péssima ideia .

Vamos começar com a má ideia . O código OP está selecionando aleatoriamente uma sequência de 8 caracteres de um conjunto de 62. Restringir a sequência aleatória a 5 letras e 3 números significa que as senhas resultantes terão, na melhor das hipóteses , 28,5 bits de entropia (em oposição a um potencial de 47,6 bits se a restrição de distribuição de 5 letras e 3 números fosse removida). Isso não é muito bom. Mas, na realidade, a situação é ainda pior. O melhor aspecto do código é destruído pelo uso de Math.randomcomo meio de gerar entropia para as senhas. Math.randomé um gerador de números pseudo-aleatórios . Devido à natureza determinística dos geradores de números pseudo-aleatórios, a entropia das senhas resultantes é muito ruim , tornando qualquer solução proposta uma péssima ideia. Supondo que essas senhas estejam sendo distribuídas para os usuários finais (e / ou qual é o ponto), um adversário ativo que recebe essa senha tem uma boa chance de prever futuras senhas distribuídas para outros usuários, e isso provavelmente não é uma coisa boa.

Mas voltando à má ideia . Suponha que um gerador de números pseudoaleatórios criptograficamente forte seja usado em vez de Math.random. Por que você restringiria as senhas a 28,5 bits? Conforme observado, isso não é muito bom. Presumivelmente, o esquema de 5 letras e 3 números visa auxiliar os usuários no gerenciamento de senhas distribuídas aleatoriamente. Mas, vamos enfrentá-lo, você deve equilibrar facilidade de uso e valor de uso , e 28,5 bits de entropia não tem muito valor na defesa contra um adversário ativo.

Mas chega de ruim. Vamos propor um caminho a seguir. Usarei a biblioteca JavaScript EntropyString , que "gera sequências aleatórias criptograficamente fortes de entropia especificada de vários conjuntos de caracteres". Em vez dos caracteres OP 62, usarei um conjunto de caracteres com 32 caracteres escolhidos para reduzir o uso de caracteres facilmente confusos ou a formação de palavras em inglês. E em vez do esquema de 5 letras e 3 números (que tem pouca entropia), proclamarei que a senha terá 60 bits de entropia (esse é o equilíbrio entre facilidade e valor).

import {Random, charSet32} from 'entropy-string'
const random = new Random(charSet32)
const string = random.string(60)

"Q7LfR8Jn7RDp"

Observe que o argumento para random.stringé os bits desejados de entropia, em oposição às soluções mais comumente vistas para a geração de string aleatória que especifica a passagem de um comprimento de string (que é mal orientado e normalmente não especificado, mas isso é outra história).

céu dingo
fonte
6

Escrevi um pequeno inspirado em sua resposta:

(function(){g=function(){c='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';p='';for(i=0;i<8;i++){p+=c.charAt(Math.floor(Math.random()*62));}return p;};p=g();while(!/[A-Z]/.test(p)||!/[0-9]/.test(p)||!/[a-z]/.test(p)){p=g();}return p;})()

Esta função retorna a senha e pode ser usada em bookmarklet como:

javascript:alert(TheCodeOfTheFunction);
Jean Philippe Crevoisier
fonte
3

Eu não recomendaria usar uma senha forçada, pois restringe a segurança do usuário, mas de qualquer forma, existem algumas maneiras de fazer isso -

Método tradicional de JavaScript -

Math.random().toString(36).slice(-8);

Usando Random String

Instale sequência aleatória:

npm install randomstring

Usando-o no App.js -

var randStr = require('randomstring');

var yourString = randStr.generate(8);

O valor da sua senha está retido na variável yourString.

Não use uma senha forçada!

A senha forçada pode prejudicar a sua segurança, pois todas as senhas estariam no mesmo conjunto de caracteres, o que pode ser facilmente violado!

Daksh Miglani
fonte
3

Ok, então se eu entendi bem que você está tentando obter uma senha de string aleatória que contém 5 letras e 3 números posicionados aleatoriamente e que tem um comprimento de 8 caracteres e você aceita letras maiúsculas e minúsculas, você pode fazer isso com a seguinte função :

function randPass(lettersLength,numbersLength) {
    var j, x, i;
    var result           = '';
    var letters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    var numbers       = '0123456789';
    for (i = 0; i < lettersLength; i++ ) {
        result += letters.charAt(Math.floor(Math.random() * letters.length));
    }
    for (i = 0; i < numbersLength; i++ ) {
        result += numbers.charAt(Math.floor(Math.random() * numbers.length));
    }
    result = result.split("");
    for (i = result.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = result[i];
        result[i] = result[j];
        result[j] = x;
    }
    result = result.join("");
    return result
}

function randPass(lettersLength,numbersLength) {
    var j, x, i;
    var result           = '';
    var letters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    var numbers       = '0123456789';
    for (i = 0; i < lettersLength; i++ ) {
        result += letters.charAt(Math.floor(Math.random() * letters.length));
    }
    for (i = 0; i < numbersLength; i++ ) {
        result += numbers.charAt(Math.floor(Math.random() * numbers.length));
    }
    result = result.split("");
    for (i = result.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = result[i];
        result[i] = result[j];
        result[j] = x;
    }
    result = result.join("");
    return result
}
console.log(randPass(5,3))

Woold
fonte
2
var letters = ['a','b','c','d','e','f','g','h','i','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
    var numbers = [0,1,2,3,4,5,6,7,8,9];
    var randomstring = '';

        for(var i=0;i<5;i++){
            var rlet = Math.floor(Math.random()*letters.length);
            randomstring += letters[rlet];
        }
        for(var i=0;i<3;i++){
            var rnum = Math.floor(Math.random()*numbers.length);
            randomstring += numbers[rnum];
        }
     alert(randomstring);
Kimon Moutsakis
fonte
1

E, finalmente, sem usar hacks de ponto flutuante:

function genpasswd(n) {
    // 36 ** 11 > Number.MAX_SAFE_INTEGER
    if (n > 10)
        throw new Error('Too big n for this function');
    var x = "0000000000" + Math.floor(Number.MAX_SAFE_INTEGER * Math.random()).toString(36);
    return x.slice(-n);
}
socketpair
fonte
1

Senha segura com um caractere maiúsculo.

let once = false;

    let newPassword = Math.random().toString(36).substr(2, 8).split('').map((char) => {
                    if(!Number(char) && !once){
                        once = true;
                        return char.toUpperCase();
                    }
                    return char;
                }).join('');

    console.log(newPassword)
Empoeirado
fonte
1

Minha criptografia baseada no problema. Usando ES6 e omitindo quaisquer verificações de recursos do navegador. Algum comentário sobre segurança ou desempenho?

const generatePassword = (
  passwordLength = 12,
  passwordChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
) =>
  [...window.crypto.getRandomValues(new Uint32Array(passwordLength))]
    .map(x => passwordChars[x % passwordChars.length])
    .join('');
Rubinoso
fonte
1

Crie um serviço gerador de senha chamado PassswordGeneratorService

import { Injectable } from '@angular/core';

@Injectable()
export class PasswordGeneratorService {

  generatePassword(length:number,upper:boolean,numbers:boolean,symbols:boolean) {
    const passwordLength = length || 12;
    const addUpper =  upper;
    const addNumbers =  numbers;
    const addSymbols =  symbols;

    const lowerCharacters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
    const upperCharacters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
    const numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    const symbols = ['!', '?', '@'];

    const getRandom = array => array[Math.floor(Math.random() * array.length)];

    let finalCharacters = '';

    if (addUpper) {
      finalCharacters = finalCharacters.concat(getRandom(upperCharacters));
    }

    if (addNumbers) {
      finalCharacters = finalCharacters.concat(getRandom(numbers));
    }

    if (addSymbols) {
      finalCharacters = finalCharacters.concat(getRandom(symbols));
    }

    for (let i = 1; i < passwordLength - 3; i++) {
      finalCharacters = finalCharacters.concat(getRandom(lowerCharacters));
    }

    return  finalCharacters.split('').sort(() => 0.5 - Math.random()).join('');
  }
}

não se esqueça de adicionar o serviço no módulo que você está usando

@NgModule({
  imports: [
    CommonModule,
    SharedModule,
    CommonModule,
    RouterModule.forChild(routes),
    FormsModule,
    ReactiveFormsModule,
    FlexLayoutModule,
    TranslateModule,
    ExistingUserDialogModule,
    UserDocumentsUploadDialogModule
  ],
  declarations: [
    UserListComponent,
    EditUserDialogComponent,
    UserEditorComponent
  ],
  entryComponents: [
    EditUserDialogComponent
  ],
  providers: [
    AuthService,
    PasswordGeneratorService
  ]
})
export class UsersModule {
}

No seu controlador, adicione um método que chama o método de geração de senha dentro do serviço e defina o resultado no campo de senha

  constructor(
     private passwordGenerator: PasswordGeneratorService,
    )
  get newPassword() {
    return this.password.get('newPassword');
  }
  generatePassword() {
    this.newPassword.setValue(this.passwordGenerator.generatePassword(8,true,true,true));
  }
Eyayu Tefera
fonte
Eu apenas tirei a função generatePassworde usei-a, sem necessidade de uma classe inteira. thnx
Biskrem Muhammad
0

Existe um gerador de string de senha aleatória com comprimento selecionado

let input = document.querySelector("textarea");
let button = document.querySelector("button");
let length = document.querySelector("input");

function generatePassword(n) 
{
	let pwd = "";

  while(!pwd || pwd.length < n)
  {
  	pwd += Math.random().toString(36).slice(-22);
  }
  
  return pwd.substring(0, n);
}

button.addEventListener("click", function()
{
	input.value = generatePassword(length.value);
});
<div>password:</div>
<div><textarea cols="70" rows="10"></textarea></div>
<div>length:</div>
<div><input type="number" value="200"></div>
<br>
<button>gen</button>

Profesor08
fonte
0

Bem, você sempre pode usar o objeto window.crypto disponível na versão recente do navegador.

Só precisa de uma linha de código para obter um número aleatório:

let n = window.crypto.getRandomValues(new Uint32Array(1))[0];

Também ajuda a criptografar e descriptografar dados. Mais informações em MDN Web docs - window.crypto .

Caiuby Freitas
fonte