
Представляемый генератор паролей создает относительно легко запоминающиеся и, в тоже время, трудноподбираемые пароли. Основная идея состоит в том, что пароли генерируются на основе слогов и поэтому выглядят как слова или словосочетания. Для лучшего запоминания используются заглавные буквы в начале каждого слога.
Проект на Google.Code:
code.google.com/p/jspassgen/downloads/list
Пример работы можно посмотреть здесь:
бизнес-книги.рус/ext/jspassgen/example.html
За основу был взят несколько другой алгоритм, хорошо описанный автором, Сергеем Михайловичем Свешниковым:
«Составлялись слоги из одной гласной и одной согласной буквы, расположенных в случайном порядке относительно друг-друга. Случайные буквы в пароле делались заглавными. Некоторые слоги разделялись цифрами, причём число цифр всегда было чётно (но случайно и не больше половины). Цифры могли стоять парами. Получался пароль заданной длинны, достаточно красивый и сложный. Число символов было чётным (ну нравилось мне так)»
Данный же алгоритм не фиксирует число символов в пароле, и рассчитан на практическое применение в качестве списка случайных предлагаемых пользователю паролей, например, при регистрации, позволяя, при желании, изменить сложность пароля регулированием количества слогов.
Так же присутствует механизм регуляции количества цифр в предлагаемых паролях, путем введения коэффициента numProb и его шага для уменьшения вероятности появления цифр с каждым новым слогом.
<style> .jsPassGenWrapper { width:300px; height:180px; padding:10px; border:1px solid #aaa; } .jsPassGenWrapper #jsPassGenForm { float:left; width:50%; font-size:16px; font-family:Courier, serif; } .jsPassGenWrapper .jsPassGenCtrls { float:right; width:50%; margin-top:100px; } .jsPassGenWrapper input { padding:0px 10px; } </style> <div class="jsPassGenWrapper"> <div id="jsPassGenForm"></div> <div class="jsPassGenCtrls"> <input type="checkbox" id="jsPassGenUseNumsCB" checked="checked" /> <label for="jsPassGenUseNumsCB">Use numbers</label><br /> <input type="button" value="Create password" onClick="runPassGen()" /> </div> <script type="text/javascript"> /* @param id - идентификатор блока для вставки паролей) @param syllableNum - количество слогов в пароле @param numPass - количество количество паролей вставляемых в блок @param useNums - использовать числа или нет */ function jsPassGen(id, syllableNum, numPass, useNums) { id = typeof(id) != 'undefined' ? id : 'jsPassGenForm'; // параметры по умолчанию syllableNum = typeof(syllableNum) != 'undefined' ? syllableNum : 3; numPass = typeof(numPass) != 'undefined' ? numPass : 10; useNums = typeof(useNums) != 'undefined' ? useNums : true; function rand(from, to) { from = typeof(from) != 'undefined' ? from : 0; // параметры to = typeof(to) != 'undefined' ? to : from + 1; // по умолчанию return Math.round(from + Math.random()*(to - from)); }; function getRandChar(a) { return a.charAt(rand(0,a.length-1)); } var form = document.getElementById(id); // Наиболее подходящие согласные для использования их в качестве заглавных var cCommon = "bcdfghklmnprstvz"; var cAll = cCommon + "jqwx"; // Все согласные var vAll = "aeiouy"; // Все гласные var lAll = cAll + vAll; // Все буквы form.innerHTML = ""; for(var j = 0; j < numPass; ++j) { // Коэффициент определяющий вероятность появления числа между слогами var numProb = 0, numProbStep = 0.25; for(var i = 0; i < syllableNum; ++i) { if(Math.round(Math.random())) { form.innerHTML += getRandChar(cCommon).toUpperCase() + getRandChar(vAll) + getRandChar(lAll); } else { form.innerHTML += getRandChar(vAll).toUpperCase() + getRandChar(cCommon); } if(useNums && Math.round(Math.random() + numProb)) { form.innerHTML += rand(0,9); numProb += numProbStep; } } form.innerHTML += "<br />"; } return false; } function runPassGen() { jsPassGen('jsPassGenForm', 3, 10, jsPassGenUseNumsCB.checked); } runPassGen(); </script> </div>
P.S.: Светлые мысли из комментариев:
Советуемые программы-генераторы паролей:
password.nanohertz.net
genpas.narod.ru
pwgen-win.sourceforge.net
genpas.ru
И один генератор ников %):
mbeaver.narod.ru/nicks
Sicness #:
идея снижает энтропию пароля и как следствие, применять стоит не везде.
docomo #:
… Сгенерированный на js пароль предлагается пользователю как один из вариантов непосредственно в форме регистрации, в то время как созданный на сервере пароль ставится принудительно.
gonzazoid #:
имхо из запоминающихся техник самая надежная — техника шокирующего абсурда. Пароли типа «моллюски отгрызли мои танцующие гениталии». Повторюсь — это из запоминаемых. Описано здесь www.ozon.ru/context/detail/id/855490
