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

в 18:38, , рубрики: php, xkcd, информационная безопасность, пароли

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

Генерация xkcd паролей на PHP
Перевод, оригинал

Все текущие реализации этого метода генерации паролей рассчитаны на английские слова, а значит пароли сложнее запомнить русскоязычным. Я вооружился частотным словарем русского языка, и сделал PHP библиотеку, которая поддерживает генерацию паролей из нескольких наборов слов:

  • английские слова (например, «idea critic happy chinese»);
  • русские слова (например, «порошок земля нуль платье»);
  • транслитерированные русские слова (например, «vysota razum bumazhka razmer»).

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

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

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

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

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

$wordList = new BarzoPasswordWordListRuTranslit();

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

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

 dovod-gore-sever-nomer-druzhka

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

echo BarzoPasswordGenerator::generateEn();
echo BarzoPasswordGenerator::generateRuTranslit();
echo BarzoPasswordGenerator::generateRu();

Списки слов

Английские слова (WordListEn)

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

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

Русские слова (WordListRu)

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

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

Русский транслит (WordListRuTranslit)

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

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

Демо

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

Автор: PatapSmile

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js