PassGenJS. Генерируем пароли в Javascript с указанием надёжности

57439b5708d04f04a8206c9da8d4a84d.pngВ одном проекте появилась необходимость генерации надежного пароля на клиенте. Поискал готовое решение, но ничего подходящего не нашел.Все библиотеки, которые нашлись, не подходили по ряду причин — генерировали пароль просто по желаемой длине, отсутствовала возможность проверки надёжности пароля. Решено было писать свой «велосипед» — как альтернативное решение, да и опыт лишним не будет. В итоге получилась библиотечка PassGenJS.

Что под капотом:

Нет зависимостей Генерация пароля по указанным параметрам (число букв, цифр, символов и т.д) Генерация пароля по величине надёжности (1 — слабый, 4 — сверхнадёжный) Генерация пароля по % надёжности (от 0 до 100%) Проверка надежности пароля через вычисление энтропии Приведу несколько примеров: Генерируем надёжный пароль: 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.

Под энтропией (информационной ёмкостью) пароля подразумевается мера случайности выбора последовательности символов, составляющих пароль, оцененная методами теории информации. В качестве формулы, использующейся для определения энтропии пароля используется

b2d2bc934c484dbcbb2393acf9a748b6.png

где N — это количество возможных символов, а L — количество символов в пароле. H измеряется в битах.

В рамках плагина используются следующие условия для определения надёжности пароля по его энтропии:

N < 56 — Слабый (1) 56 <= N < 64 — Средний (2) 64 <= N < 128 — Надёжный (3) N > 128 — Сверхнадёжный (4) 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; } Буду рад здоровой критике и любому фидбеку. Если кому-то плагин окажется полезен, то можно развивать дальше:

плагин для jquery ограничения на длину пароля исключение определённых символов добавление произвольных букв (через передачу параметра) и т.д. Демо GitHub

© Habrahabr.ru