자바 스크립트 비밀번호 생성기
a-z
, A-Z
및 0-9
?를 포함하는 8 자 임의 암호를 만드는 가장 좋은 방법은 무엇입니까 ?
보안 문제는 전혀 없습니다. 이것은 단지 프로토 타이핑을위한 것일뿐 현실적으로 보이는 데이터를 원합니다.
나는 for (0 to 7) Math.random
ASCII 코드를 생성하고 문자로 변환하는 것을 생각하고 있었다 . 다른 제안이 있습니까?
아마도 다음과 같은 것을 사용할 것입니다.
function generatePassword() {
var length = 8,
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
retVal = "";
for (var i = 0, n = charset.length; i < length; ++i) {
retVal += charset.charAt(Math.floor(Math.random() * n));
}
return retVal;
}
그런 다음 매개 변수에 의해 전달되는 길이와 문자 집합을 갖도록 확장 할 수 있습니다.
이것이 내가 아는 가장 빠르고 쉬운 방법입니다.
Math.random().toString(36).slice(2)
아이디어는 임의의 숫자 (0..1 범위)를 base36 문자열 (소문자 az + 0-9)로 캐스팅하고 선행 0과 소수점을 제거하는 것입니다.
유의하시기 바랍니다 의사 생성 된 모든 암호는 취약점의 형태를 가지고있다. 그러나 모든 일반적인 사용 사례에 충분하다고 말할 수 있습니다. 또한이 암호가 보장 되지 않는 경우 이론적 인 길이 입니다. 최대 16 자, 최소 0 자입니다. 평균 길이의 100 만 배에 해당하는 루프에서 실행하면 최소 길이가 5 인 15.67 자입니다. 그러나 이러한 암호 중 두 개를 결합하면 최대 길이는 32 자, 평균 길이는 31.33 자이고 최소 길이는 20입니다.
Math.random().toString(36).slice(2) + Math.random().toString(36).slice(2)
개인적으로 저는 이것을 bookmarklet
브라우저 북마크 바에서 크롬으로 사용 하여 신속하게 비밀번호를 생성합니다.
javascript:(
function(){
prompt('Here is your shiny new password:',
Math.random().toString(36).slice(2) +
Math.random().toString(36).slice(2)
);
}
)();
function password_generator( len ) {
var length = (len)?(len):(10);
var string = "abcdefghijklmnopqrstuvwxyz"; //to upper
var numeric = '0123456789';
var punctuation = '!@#$%^&*()_+~`|}{[]\:;?><,./-=';
var password = "";
var character = "";
var crunch = true;
while( password.length<length ) {
entity1 = Math.ceil(string.length * Math.random()*Math.random());
entity2 = Math.ceil(numeric.length * Math.random()*Math.random());
entity3 = Math.ceil(punctuation.length * Math.random()*Math.random());
hold = string.charAt( entity1 );
hold = (password.length%2==0)?(hold.toUpperCase()):(hold);
character += hold;
character += numeric.charAt( entity2 );
character += punctuation.charAt( entity3 );
password = character;
}
password=password.split('').sort(function(){return 0.5-Math.random()}).join('');
return password.substr(0,len);
}
console.log( password_generator() );
이렇게하면 암호 강도 테스트를 통과해야하는 좀 더 강력한 암호가 생성됩니다. 예를 들면 : f1&d2?I4(h1&
, C1^y1)j1@G2#
,j2{h6%b5@R2)
function generatePass(plength){
var keylistalpha="abcdefghijklmnopqrstuvwxyz";
var keylistint="123456789";
var keylistspec="!@#_";
var temp='';
var len = plength/2;
var len = len - 1;
var lenspec = plength-len-len;
for (i=0;i<len;i++)
temp+=keylistalpha.charAt(Math.floor(Math.random()*keylistalpha.length));
for (i=0;i<lenspec;i++)
temp+=keylistspec.charAt(Math.floor(Math.random()*keylistspec.length));
for (i=0;i<len;i++)
temp+=keylistint.charAt(Math.floor(Math.random()*keylistint.length));
temp=temp.split('').sort(function(){return 0.5-Math.random()}).join('');
return temp;
}
이것은 8 자의 암호화 무작위 암호를 생성하는 내 기능입니다.
function generatePassword() {
var buf = new Uint8Array(6);
window.crypto.getRandomValues(buf);
return btoa(String.fromCharCode.apply(null, buf));
}
기능 : 암호화 랜덤 8 비트 정수 6 개를 검색하여 Base64로 인코딩합니다.
그 결과 생성 된 패스워드로 구성 될 수있다 Base64로 문자 집합이므로 A
- Z
, a
- z
, 0
- 9
, +
및 /
.
lodash> = 4.0이 제자리에 있다면 더 우아한 방법이 있습니다.
var chars = 'abcdefghkmnpqrstuvwxyz23456789';
function generatePassword(length) {
return _.sampleSize(chars, length).join('');
}
문자 [\]^_
가 있으면 현실적인 암호가 생성됩니다 . lodash 및 es7 필요
String.fromCodePoint(...range(8).map(() => Math.floor(Math.random() * 57) + 0x41))
그리고 여기에 lodash가 없습니다
String.fromCodePoint(...Array.from({length: 8}, () => Math.floor(Math.random() * 57) + 65))
Gumbo의 솔루션이 작동하지 않습니다. 하지만 이것은 다음과 같습니다.
function makePasswd() {
var passwd = '';
var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for (i=1;i<8;i++) {
var c = Math.floor(Math.random()*chars.length + 1);
passwd += chars.charAt(c)
}
return passwd;
}
여기에 간단한 스마트 코드가 있습니다.
function generate(l) {
if (typeof l==='undefined'){var l=8;}
/* c : alphanumeric character string */
var c='abcdefghijknopqrstuvwxyzACDEFGHJKLMNPQRSTUVWXYZ12345679',
n=c.length,
/* p : special character string */
p='!@#$+-*&_',
o=p.length,
r='',
n=c.length,
/* s : determinate the position of the special character */
s=Math.floor(Math.random() * (p.length-1));
for(var i=0; i<l; ++i){
if(s == i){
/* special charact insertion (random position s) */
r += p.charAt(Math.floor(Math.random() * o));
}else{
/* alphanumeric insertion */
r += c.charAt(Math.floor(Math.random() * n));
}
}
return r;
}
간단히 generate ()를 호출하면 보안을 위해 하나의 특수 문자 (! @ # $ +-* & _)를 포함하는 키를 수행합니다.
가능한 결과 : WJGUk $ Ey, gaV7 # fF7, ty_T55DD, YtrQMWveZqYyYKo_
내 웹 사이트에 자세한 내용과 예가 있습니다 .https : //www.bxnxg.com/minituto-01-generer-mots-de-passes-secures-facilements-en-javascript/
다음은 특수 문자의 최소값, 상위 문자의 최소값, 하위 문자의 최소값 및 숫자의 최소값을 설정하는 더 많은 옵션을 제공하는 기능입니다.
function randomPassword(len = 8, minUpper = 0, minLower = 0, minNumber = -1, minSpecial = -1) {
let chars = String.fromCharCode(...Array(127).keys()).slice(33),//chars
A2Z = String.fromCharCode(...Array(91).keys()).slice(65),//A-Z
a2z = String.fromCharCode(...Array(123).keys()).slice(97),//a-z
zero2nine = String.fromCharCode(...Array(58).keys()).slice(48),//0-9
specials = chars.replace(/\w/g, '')
if (minSpecial < 0) chars = zero2nine + A2Z + a2z
if (minNumber < 0) chars = chars.replace(zero2nine, '')
let minRequired = minSpecial + minUpper + minLower + minNumber
let rs = [].concat(
Array.from({length: minSpecial ? minSpecial : 0}, () => specials[Math.floor(Math.random() * specials.length)]),
Array.from({length: minUpper ? minUpper : 0}, () => A2Z[Math.floor(Math.random() * A2Z.length)]),
Array.from({length: minLower ? minLower : 0}, () => a2z[Math.floor(Math.random() * a2z.length)]),
Array.from({length: minNumber ? minNumber : 0}, () => zero2nine[Math.floor(Math.random() * zero2nine.length)]),
Array.from({length: Math.max(len, minRequired) - (minRequired ? minRequired : 0)}, () => chars[Math.floor(Math.random() * chars.length)]),
)
return rs.sort(() => Math.random() > Math.random()).join('')
}
randomPassword(12, 1, 1, -1, -1)// -> DDYxdVcvIyLgeB
randomPassword(12, 1, 1, 1, -1)// -> KYXTbKf9vpMu0
randomPassword(12, 1, 1, 1, 1)// -> hj|9)V5YKb=7
더 짧게 :
Array.apply(null, Array(8)).map(function() {
var c = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
return c.charAt(Math.random() * c.length);
}).join('');
또는 기능으로 :
function generatePassword(length, charSet) {
charSet = charSet ? charSet : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^°!"§$%&/()=?`*+~\'#,;.:-_';
return Array.apply(null, Array(length || 10)).map(function() {
return charSet.charAt(Math.random() * charSet.length);
}).join('');
}
문자별로 Alpha, Numeric, Caps 및 Special을 무작위로 할당 한 다음 암호를 확인합니다. 위의 각 항목이 포함되지 않은 경우 누락 된 요소의 새 문자를 임의의 기존 문자에 무작위로 할당 한 다음 암호가 형성 될 때까지 재귀 적으로 유효성을 검사합니다.
function createPassword(length) {
var alpha = "abcdefghijklmnopqrstuvwxyz";
var caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numeric = "0123456789";
var special = "!$^&*-=+_?";
var options = [alpha, caps, numeric, special];
var password = "";
var passwordArray = Array(length);
for (i = 0; i < length; i++) {
var currentOption = options[Math.floor(Math.random() * options.length)];
var randomChar = currentOption.charAt(Math.floor(Math.random() * currentOption.length));
password += randomChar;
passwordArray.push(randomChar);
}
checkPassword();
function checkPassword() {
var missingValueArray = [];
var containsAll = true;
options.forEach(function (e, i, a) {
var hasValue = false;
passwordArray.forEach(function (e1, i1, a1) {
if (e.indexOf(e1) > -1) {
hasValue = true;
}
});
if (!hasValue) {
missingValueArray = a;
containsAll = false;
}
});
if (!containsAll) {
passwordArray[Math.floor(Math.random() * passwordArray.length)] = missingValueArray.charAt(Math.floor(Math.random() * missingValueArray.length));
password = "";
passwordArray.forEach(function (e, i, a) {
password += e;
});
checkPassword();
}
}
return password;
}
Stephan Hoyer의 솔루션을 기반으로 한 또 다른 접근 방식이 있습니다.
getRandomString (length) {
var chars = 'abcdefghkmnpqrstuvwxyz23456789';
return times(length, () => sample(chars)).join('');
}
다음은 임의의 암호를 생성하는 구성 가능한 무료 Javascript 클래스입니다. Javascript Random Password Generator .
예
Password consisting of Lower case + upper case + numbers, 8 characters long:
var randomPassword = new RandomPassword();
document.write(randomPassword.create());
Password consisting of Lower case + upper case + numbers, 20 characters long:
var randomPassword = new RandomPassword();
document.write(randomPassword.create(20));
Password consisting of Lower case + upper case + numbers + symbols, 20 characters long:
var randomPassword = new RandomPassword();
document.write(randomPassword.create(20,randomPassword.chrLower+randomPassword.chrUpper+randomPassword.chrNumbers+randomPassword.chrSymbols));
var createPassword = function() {
var passAt = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
var passArray = Array.from({length: 15})
return passArray.map(function(_, index) {
return index % 4 == 3 ? '-' : passAt.charAt(Math.random() * passAt.length)
}).join('')
}
result like:
L5X-La0-bN0-UQO
9eW-svG-OdS-8Xf
ick-u73-2s0-TMX
5ri-PRP-MNO-Z1j
function genPass(n) // e.g. pass(10) return 'unQ0S2j9FY'
{
let c='abcdefghijklmnopqrstuvwxyz'; c+=c.toUpperCase()+1234567890;
return [...Array(n)].map(b=>c[~~(Math.random()*62)]).join('')
}
Where n
is number of output password characters; 62
is c.length
and where e.g. ~~4.5 = 4
is trick for replace Math.floor
Alternative
function genPass(n) // e.g. pass(10) return 'unQ0S2j9FY'
{
let c='abcdefghijklmnopqrstuvwxyz'; c+=c.toUpperCase()+1234567890;
return '-'.repeat(n).replace(/./g,b=>c[~~(Math.random()*62)])
}
to extend characters list, add them to c
e.g. to add 10 characters !$^&*-=+_?
write c+=c.toUpperCase()+1234567890+'!$^&*-=+_?'
and change Math.random()*62
to Math.random()*72
(add 10 to 62).
This method gives the options to change size and charset of your password.
function generatePassword(length=8, charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") {
return new Array(length)
.fill(null)
.map(()=> charset.charAt(Math.floor(Math.random() * charset.length)))
.join('');
}
console.log(generatePassword()); // 02kdFjzX
console.log(generatePassword(4)); // o8L5
console.log(generatePassword(16)); // jpPd7S09txv9b02p
console.log(generatePassword(16, "abcd1234")); // 4c4d323a31c134dd
Here is a solution I found, if you look at the source of the page you can see how they implement their examples as well:
https://www.404it.no/en/blog/javascript_random_password_generator
Javascript Random Password Generator Published: January 6th 2015 Updated: January 18th 2015 Author: Per Kristian Haakonsen
ReferenceURL : https://stackoverflow.com/questions/1497481/javascript-password-generator
'IT TIP' 카테고리의 다른 글
iOS 8에서 UIImagePickerController가 표시되지 않음 (0) | 2020.12.27 |
---|---|
Android에서 이미지를 투명하게 만들려면 어떻게해야합니까? (0) | 2020.12.27 |
UIScrollView contentSize가 작동하지 않습니다. (0) | 2020.12.27 |
C에서 정수 길이 찾기 (0) | 2020.12.27 |
addSubview 애니메이션 (0) | 2020.12.27 |