- PVSM.RU - https://www.pvsm.ru -
В одном проекте появилась необходимость генерации надежного пароля на клиенте. Поискал готовое решение, но ничего подходящего не нашел.
Все библиотеки, которые нашлись, не подходили по ряду причин — генерировали пароль просто по желаемой длине, отсутствовала возможность проверки надёжности пароля. Решено было писать свой «велосипед» — как альтернативное решение, да и опыт лишним не будет. В итоге получилась библиотечка PassGenJS.
Что под капотом:
Генерируем надёжный пароль:
PassGenJS.getPassword({score: 3});
// Результат - 8!G$}6&={a(_>
Генерируем очень простой пароль:
PassGenJS.getPassword({score: 1});
// Результат - 82oN
Генерируем пароль c 60% надежностью:
PassGenJS.getPassword({reliabilityPercent: 60});
// Результат - YyopjU5atXBMG
Генерируем пароль c символьными параметрами:
PassGenJS.getPassword({
symbols: 2, // Количество спец. символов
letters: 2, // Количество букв
numbers: 1, // Количество цифр
lettersUpper: 5 // Количество букв в верхнем регистре
});
// Результат - m6A:k=WYPP
Также есть возможность проверить надёжность пароля:
PassGenJS.getScore("YyopjU5atXBMG");
// Результат:
{
"password": "YyopjU5atXBMG", // Пароль
"score": 3, // Надёжность пароля (4 - наилучший)
"entropy": 77, // Энтропия пароля
"reliability": 60.15625, // Надёжность пароля (абсолютное значение)
"reliabilityPercent": 60 // Надёжность пароля в %
}
Алгоритм оценки, используемый в данном плагине, опирается на общие положения теории информации.
В качестве оценки стойкости пароля используется значение его энтропии. Подробнее можно почитать на Wikipedia [1].
Под энтропией (информационной ёмкостью) пароля подразумевается мера случайности выбора последовательности символов, составляющих пароль, оцененная методами теории информации. В качестве формулы, использующейся для определения энтропии пароля используется
где N — это количество возможных символов, а L — количество символов в пароле. H измеряется в битах.
В рамках плагина используются следующие условия для определения надёжности пароля по его энтропии:
if (entropy > 0 && entropy < 56) {
score = 1;
} else if (entropy >= 56 && entropy < 64) {
score = 2;
} else if (entropy >= 64 && entropy < 128) {
score = 3;
} else if (entropy >= 128) {
score = 4;
}
Буду рад здоровой критике и любому фидбеку. Если кому-то плагин окажется полезен, то можно развивать дальше:
Автор: antonre
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/72126
Ссылки в тексте:
[1] Wikipedia: https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8F
[2] Демо: http://env-5965744.jelastic.regruhosting.ru/passgenjs/
[3] GitHub: https://github.com/amartov/PassGenJS
[4] Источник: http://habrahabr.ru/post/239165/
Нажмите здесь для печати.