Information Security
PHP
August 2014 4

Генерация xkcd паролей на PHP

Известный комикс xkcd подсказывает нам, что пароль, который состоит из 4 часто употребляемых слов — легко запомнить и сложно подобрать.


Перевод, оригинал

Все текущие реализации этого метода генерации паролей рассчитаны на английские слова, а значит пароли сложнее запомнить русскоязычным. Я вооружился частотным словарем русского языка, и сделал PHP библиотеку, которая поддерживает генерацию паролей из нескольких наборов слов:
  • английские слова (например, «idea critic happy chinese»);
  • русские слова (например, «порошок земля нуль платье»);
  • транслитерированные русские слова (например, «vysota razum bumazhka razmer»).

Код и списки слов на GitHub.


Установка с помощью composer


{
    "require": {
        "barzo/password-generator": "dev-master"
    }
}

Генерация паролей


Пароли генерирует статическая функция Generator::generate, которая принимает три параметра: список слов, длину пароля (количество слов) и разделитель слов. Например, генерации пароля из 5 транслитерированных слов разделенных дефисом:

$wordList = new Barzo\Password\WordList\RuTranslit();

echo Generator::generate($wordList, 5, '-');

Вывод будет содержать строку похожую на:

 dovod-gore-sever-nomer-druzhka

Для каждого списка слов есть синоним для быстрого вызова:

echo Barzo\Password\Generator::generateEn();
echo Barzo\Password\Generator::generateRuTranslit();
echo Barzo\Password\Generator::generateRu();


Списки слов


Английские слова (WordList\En)

Список из 2048 наиболее часто используемых слов английского языка на основании корпуса современного американского английского.

Пример вывода — idea critic happy chinese.

Русские слова (WordList\Ru)

Список из 2048 наиболее часто используемых русских имен существительных на основании национального корпуса русского языка.

Пример вывода — порошок земля нуль платье.

Русский транслит (WordList\RuTranslit)

Список из 2048 слов на основании предыдущего списка, из которого исключены слова, которые содержат неоднозначные для транслитерации буквы (ц, щ, ь, ъ).

Пример вывода — vysota razum bumazhka razmer.

Демо


Попробовать библиотеку можно тут.

Реализация с этими списками слов на JS (исходники, автор — perevedko).
+33
19.5k 100
Comments 53
Top of the day