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);
}
javascript
ffffff01
fonte
fonte
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 leveRespostas:
Forçar um número fixo de caracteres é uma má 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:
Como funciona?
Documentação para os métodos
Number.prototype.toString
estring.prototype.slice
.fonte
Math.random().toString(36).substr(2, 8)
.toString
só 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, useMath.random
(oucrypto.getRandomValues
se disponível) e mapeie o resultado para az, AZ, 0-9. Por exemplo, usando a resposta de saaj abaixo.Uma abordagem um pouco mais segura e sustentável.
fonte
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:
Observe que
Três linhas:
Ou, como uma linha:
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:
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):
fonte
Para quem procura um guião simples. Não
while (true)
, nãoif/else
, nenhuma declaração.Baseie-se na resposta de mwag, mas esta usa
crypto.getRandomValues
um aleatório mais forte do queMath.random
.Veja isso para
0xffffffff
.Alternativa 1
Alternativa 2
Node.js
fonte
+ 1
peça não é necessária e pode ser removida.crypto.getRandomValues
por crypto.randomFillSync .Isso não é exatamente otimizado, mas deve funcionar.
Aqui está um jsfiddle para você testar em: http://jsfiddle.net/sJGW4/3/
fonte
chars.substring(rnum, rnum+1)
é exatamente comochars.charAt(rnum)
Caso você precise de uma senha gerada com pelo menos 1 número, 1 caractere maiúsculo e 1 caractere minúsculo:
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.
fonte
j
: P Caso contrário, coisas boas aqui. Porém, modifiquei um pouco para atender aos meus requisitos.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.random
sã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.random
como 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).
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).fonte
Escrevi um pequeno inspirado em sua resposta:
Esta função retorna a senha e pode ser usada em bookmarklet como:
fonte
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 -
Usando Random String
Instale sequência aleatória:
Usando-o no App.js -
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!
fonte
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 :
fonte
fonte
E, finalmente, sem usar hacks de ponto flutuante:
fonte
Senha segura com um caractere maiúsculo.
fonte
Minha criptografia baseada no problema. Usando ES6 e omitindo quaisquer verificações de recursos do navegador. Algum comentário sobre segurança ou desempenho?
fonte
Experimente, funciona. Baixe o script para o seu aplicativo javascript e chame a função randomPassword () https://gist.github.com/enishant/4ba920c71f338e83c7089dc5d6f33a64
fonte
Crie um serviço gerador de senha chamado PassswordGeneratorService
não se esqueça de adicionar o serviço no módulo que você está usando
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
fonte
generatePassword
e usei-a, sem necessidade de uma classe inteira. thnxExiste um gerador de string de senha aleatória com comprimento selecionado
fonte
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:
Também ajuda a criptografar e descriptografar dados. Mais informações em MDN Web docs - window.crypto .
fonte