
Представляемый генератор паролей создает относительно легко запоминающиеся и, в тоже время, трудноподбираемые пароли. Основная идея состоит в том, что пароли генерируются на основе слогов и поэтому выглядят как слова или словосочетания. Для лучшего запоминания используются заглавные буквы в начале каждого слога.
Проект на 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