배너 이미지

[자바스크립트] 강력한 비밀번호 만들기

최종 수정일 : (1년 전)

깃허브
비밀번호 제작 페이지

무작위로 나열된 문자열을 제작하는 스크립트입니다.
비밀번호나, 쿠폰 코드 등에 사용하실 수 있습니다.

전 주로 스킨 다운로드용 쿠폰을 발급할 때 사용합니다.

예전 블로그에 올린 스크립트에 이것저것 업데이트해봤습니다.

let setting = {
    "number"true,
    "symbol"false,
    "capital"true,
    "small"true,
    "removeSimilar"false,
    "autoCopy"true,
    "length"20
};
const pwoutput = document.getElementById("password");
let chars;

function init() {
    const storage = localStorage.getItem("pw-setting");

    storage && (
        setting = JSON.parse(storage)
    ),

    [...document.querySelectorAll("input[type=checkbox]")].forEach(input => {
        input.checked = setting[input.id]
    }),

    document.getElementById("pwlength").value = setting.length,

    updateChars()
}

function createChars() {
    let tmp = "";

    if (setting.number) {
        tmp = tmp + "0123456789"
    }
    if (setting.symbol) {
        tmp = tmp + "!@#$%^&*()-_=+"
    }
    if (setting.capital) {
        tmp = tmp + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    }
    if (setting.small) {
        tmp = tmp + "abcdefghijklmnopqrstuvwxyz"
    }
    if (setting.removeSimilar) {
        tmp = tmp.replace(/01|i|I|O/g"")
    }

    return tmp;
}

function updateChars() {
    chars = createChars()
}

function saveSetting() {
    localStorage.setItem("pw-setting"JSON.stringify(setting))
}

init(),

document.getElementById("psbtn").addEventListener("click", () => {
    const length = chars.length;
    let password = "",
        tmp;

    for (let i = 0i < setting.lengthi++) {
        const random = Math.floor(Math.random() * length);
        tmp = chars.charAt(random);
        password = password + tmp
    }

    pwoutput.innerText = password;

    if (setting.autoCopy) {
        const select = document.createRange()
        select.selectNode(pwoutput),
        window.getSelection().removeAllRanges(),
        window.getSelection().addRange(select),
        document.execCommand("copy");
    }
}),

[...document.querySelectorAll(".settings")].forEach(a => {
    a.addEventListener("click", () => {
        const target = a.querySelector("input");

        setting[target.id= target.checked,
        saveSetting(),
        updateChars()
    })
}),

document.getElementById("pwlength").addEventListener("change"function() {
    setting.length = this.value,
    saveSetting()
});

예전엔 비밀번호 생성 버튼을 클릭하면 모든 설정 정보를 확인해 비밀번호에 쓸 문자열을 생성하고 비밀번호를 제작하는 과정을 계속 반복했습니다만, 이젠 비밀번호 생성 버튼은 비밀번호의 생성에만 관여합니다.

설정 정보를 변경하면, 변경된 정보를 저장하고, 비밀번호에 쓸 문자열을 업데이트합니다.
ex) Number 체크 해제 시 setting의 Number를 false로 바꾸고 저장 후 문자열에서 0123456789를 제거함.

비밀번호 생성 버튼을 클릭하면 이미 생성돼있던 문자열에 접근 후 무작위로 문자를 가져와 비밀번호를 생성합니다.


profile

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

주의 : 비밀 댓글 사용 시 수정 기능을 이용할 수 있는 시간이 지나면 작성자도 내용 확인이 불가능합니다.