암호 강도 측정기
내 시스템에 대한 웹 인터페이스에서 사용자 암호를 평가하여 제출을 누르기 전에 잘못된 암호가 있는지 알 수있는 상황이 있습니다.
주요 요구 사항 :
- 통과 / 실패뿐만 아니라 암호를 평가할 수 있어야합니다.
- 암호가 임계 값 미만이면 사용자가 제출할 수 없도록 양식을 비활성화해야합니다.
- 멋져요. :)
- jQuery를 사용하지 마십시오. 현재이 시스템에서 Mochikit 및 Y! UI를 사용하고 있습니다.
jQuery로 작성된 많은 암호 측정기와 너무 장황한 http://www.passwordmeter.com/ 과 같은 것을 발견했습니다 .
누구든지 내가 사용할 수있는 자바 스크립트 암호 평가 기의 좋은 드롭을 제안하거나 작성 방법의 예를 제공 할 수 있습니까?
다음은 스크립트 모음입니다. http://webtecker.com/2008/03/26/collection-of-password-strength-scripts/
둘 다 암호를 평가하고 jQuery를 사용하지 않는다고 생각하지만 양식 비활성화에 대한 기본 지원이 있는지 모르겠습니다.
업데이트 : 라이브를보기 위해 여기에 js 바이올린을 만들었습니다 : http://jsfiddle.net/HFMvX/
나는 수많은 Google 검색을 통해 만족스러운 것을 찾지 못했습니다. 나는 passpack이 어떻게 그렇게 본질적으로 그들의 접근 방식을 리버스 엔지니어링했는지를 좋아합니다.
function scorePassword(pass) {
var score = 0;
if (!pass)
return score;
// award every unique letter until 5 repetitions
var letters = new Object();
for (var i=0; i<pass.length; i++) {
letters[pass[i]] = (letters[pass[i]] || 0) + 1;
score += 5.0 / letters[pass[i]];
}
// bonus points for mixing it up
var variations = {
digits: /\d/.test(pass),
lower: /[a-z]/.test(pass),
upper: /[A-Z]/.test(pass),
nonWords: /\W/.test(pass),
}
variationCount = 0;
for (var check in variations) {
variationCount += (variations[check] == true) ? 1 : 0;
}
score += (variationCount - 1) * 10;
return parseInt(score);
}
좋은 암호는 약 60 점 정도의 점수를 받기 시작합니다. 다음은이를 단어로 번역하는 기능입니다.
function checkPassStrength(pass) {
var score = scorePassword(pass);
if (score > 80)
return "strong";
if (score > 60)
return "good";
if (score >= 30)
return "weak";
return "";
}
당신은 이것을 조금 조정하고 싶을 수도 있지만 나는 그것이 나를 위해 잘 작동한다는 것을 알았습니다.
Password Strength Algorithm:
Password Length:
5 Points: Less than 4 characters
10 Points: 5 to 7 characters
25 Points: 8 or more
Letters:
0 Points: No letters
10 Points: Letters are all lower case
20 Points: Letters are upper case and lower case
Numbers:
0 Points: No numbers
10 Points: 1 number
20 Points: 3 or more numbers
Characters:
0 Points: No characters
10 Points: 1 character
25 Points: More than 1 character
Bonus:
2 Points: Letters and numbers
3 Points: Letters, numbers, and characters
5 Points: Mixed case letters, numbers, and characters
Password Text Range:
>= 90: Very Secure
>= 80: Secure
>= 70: Very Strong
>= 60: Strong
>= 50: Average
>= 25: Weak
>= 0: Very Weak
설정 암호에서 확인 된 내용을 변경하려면 true 또는 false로 전환합니다.
var m_strUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var m_strLowerCase = "abcdefghijklmnopqrstuvwxyz";
var m_strNumber = "0123456789";
var m_strCharacters = "!@#$%^&*?_~"
Check password
function checkPassword(strPassword)
{
// Reset combination count
var nScore = 0;
// Password length
// -- Less than 4 characters
if (strPassword.length < 5)
{
nScore += 5;
}
// -- 5 to 7 characters
else if (strPassword.length > 4 && strPassword.length < 8)
{
nScore += 10;
}
// -- 8 or more
else if (strPassword.length > 7)
{
nScore += 25;
}
// Letters
var nUpperCount = countContain(strPassword, m_strUpperCase);
var nLowerCount = countContain(strPassword, m_strLowerCase);
var nLowerUpperCount = nUpperCount + nLowerCount;
// -- Letters are all lower case
if (nUpperCount == 0 && nLowerCount != 0)
{
nScore += 10;
}
// -- Letters are upper case and lower case
else if (nUpperCount != 0 && nLowerCount != 0)
{
nScore += 20;
}
// Numbers
var nNumberCount = countContain(strPassword, m_strNumber);
// -- 1 number
if (nNumberCount == 1)
{
nScore += 10;
}
// -- 3 or more numbers
if (nNumberCount >= 3)
{
nScore += 20;
}
// Characters
var nCharacterCount = countContain(strPassword, m_strCharacters);
// -- 1 character
if (nCharacterCount == 1)
{
nScore += 10;
}
// -- More than 1 character
if (nCharacterCount > 1)
{
nScore += 25;
}
// Bonus
// -- Letters and numbers
if (nNumberCount != 0 && nLowerUpperCount != 0)
{
nScore += 2;
}
// -- Letters, numbers, and characters
if (nNumberCount != 0 && nLowerUpperCount != 0 && nCharacterCount != 0)
{
nScore += 3;
}
// -- Mixed case letters, numbers, and characters
if (nNumberCount != 0 && nUpperCount != 0 && nLowerCount != 0 && nCharacterCount != 0)
{
nScore += 5;
}
return nScore;
}
// Runs password through check and then updates GUI
function runPassword(strPassword, strFieldID)
{
// Check password
var nScore = checkPassword(strPassword);
// Get controls
var ctlBar = document.getElementById(strFieldID + "_bar");
var ctlText = document.getElementById(strFieldID + "_text");
if (!ctlBar || !ctlText)
return;
// Set new width
ctlBar.style.width = (nScore*1.25>100)?100:nScore*1.25 + "%";
// Color and text
// -- Very Secure
/*if (nScore >= 90)
{
var strText = "Very Secure";
var strColor = "#0ca908";
}
// -- Secure
else if (nScore >= 80)
{
var strText = "Secure";
vstrColor = "#7ff67c";
}
// -- Very Strong
else
*/
if (nScore >= 80)
{
var strText = "Very Strong";
var strColor = "#008000";
}
// -- Strong
else if (nScore >= 60)
{
var strText = "Strong";
var strColor = "#006000";
}
// -- Average
else if (nScore >= 40)
{
var strText = "Average";
var strColor = "#e3cb00";
}
// -- Weak
else if (nScore >= 20)
{
var strText = "Weak";
var strColor = "#Fe3d1a";
}
// -- Very Weak
else
{
var strText = "Very Weak";
var strColor = "#e71a1a";
}
if(strPassword.length == 0)
{
ctlBar.style.backgroundColor = "";
ctlText.innerHTML = "";
}
else
{
ctlBar.style.backgroundColor = strColor;
ctlText.innerHTML = strText;
}
}
// Checks a string for a list of characters
function countContain(strPassword, strCheck)
{
// Declare variables
var nCount = 0;
for (i = 0; i < strPassword.length; i++)
{
if (strCheck.indexOf(strPassword.charAt(i)) > -1)
{
nCount++;
}
}
return nCount;
}
요구 사항에 따라 직접 사용자 지정할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/948172/password-strength-meter
'Development Tip' 카테고리의 다른 글
GIT 복원 마지막 분리 HEAD (0) | 2020.11.25 |
---|---|
ActionBar의 오버플로 메뉴에 아이콘을 표시하는 방법 (0) | 2020.11.25 |
JDBC batch insert performance (0) | 2020.11.25 |
Swift iOS에서 기기 방향 설정 (0) | 2020.11.25 |
nan 값을 0으로 변환 (0) | 2020.11.25 |