Введение
По-видимому, этот вопрос был задан здесь, и он, к сожалению, закрыт. Я подумал, что это хорошая идея, попробовать еще раз, но все сделано правильно.
XKCD смотрит на то, как нас обучают использовать «трудно запоминающиеся пароли», думая, что это безопасно, но вместо этого компьютеру потребуется 3 дня, чтобы взломать. С другой стороны, запоминание 4-5 слов приводит к появлению Kuan's Password Intropy, и его легко запомнить. Сумасшедший, как это работает, а?
Вызов
Работа сегодня состоит в том, чтобы создать 5 паролей, используя слова. 4 слова на пароль и минимум 4 буквы на слово, но не максимум. Интропия пароля Куана должна быть рассчитана для каждого пароля, но принудительный минимум не будет установлен.
Что такое парольная интропия Куана?
По словам Куана, интропия пароля Куана является мерой того, насколько непредсказуемым является пароль. Есть простой расчет: E = log 2 (R) * L . E - Интропия пароля Куана, R - диапазон доступных символов и L - длина пароля.
Диапазон доступных символов не требует пояснений. Это диапазон символов, который может иметь пароль, в данном случае это верхний и нижний регистр. Поскольку в алфавите 26 символов, 26 x 2 = 52 символа во всем диапазоне пароля.
Длина пароля также не требует пояснений. Это общая длина пароля после создания.
Ограничения
- Нет ввода.
- Слово не может появиться в том же пароле.
- Никакие символы или цифры не допускаются в пароле.
- 4 слова на пароль, но не менее 4 букв на слово.
- Между словами нет пробелов.
- Вы не можете генерировать один и тот же пароль снова и снова.
- Каждое слово должно быть написано заглавными буквами в пароле.
- Вывод должен быть удобочитаемым, должен быть разнесен. Необходимо также включить в него парольную интропию пароля Куана, используя приведенное выше уравнение парольной паролей Куана.
- Словарь . Вы должны использовать это, скачать его как текстовый файл и интегрировать соответственно. Это будет список, из которого вы берете слова. Ваш код должен предполагать его доступность.
- Это код-гольф , выигрывают короткие байты.
Выход
TriedScarProgressPopulation 153.9
TryingPastOnesPutting 119.7
YearnGasesDeerGiven 108.3
DoubtFeetSomebodyCreature 142.5
LiquidSureDreamCatch 114.0
N
символы из набораS
, энтропия пароля -log2(|S|)*N
. Здесь размер набора символов - это размер словаря (|S|=4284
), а количество символов - это количество слов (N=4
), поэтому энтропия для каждого пароля равна48.3
.3t1ta#asd
), тогда энтропия будет логарифмом числа возможных паролей. Если вы всегда выбираете 4 слова случайным образом из словаря на 4284 слова, то есть 4284 ^ 4 паролей, каждый с энтропийным журналом₂ (4284) * 4 ≈ 48,26.Ответы:
Python 2,
1021019791 байтПринимает словарь в виде списка с именем
f
.Можно проверить, сохранив файл как
dict.txt
и вызываяисточник
exec
(exec
это ключевое слово в Python 2).shuffle(f);
.57*len(x)/10.
. Сохраните еще один байт, удалив скобки, чтобы печать заняла кортеж. Вот урезанная версия: TIOsample(f,4)
вместоshuffle
. Такжеf
может бытьopen('dict.txt').read().split('\n')
,open('dict.txt').readlines()
или простоopen('dict.txt')
(я знаю, что это не игра в гольф, но все же).PowerShell (3.0+), 77 байт
Попробуйте онлайн!
Использование Jonathan Allan «s
57*len/10
трюк.$d
содержит словарь в виде массива слов. Если вы играете дома и хотите заполнить$d
:Использование версии для игры
(Get-Culture).TextInfo.ToTitleCase()
в гольф для заглавной буквы; Я не думаю, что есть более короткий способ сделать это в PowerShell.Все остальное довольно просто, я думаю.
Ссылка TIO содержит весь словарь; отключить кеш и сходить с ума!
источник
$d
как предполагается, если он присутствует в окружающей среде.(gc d)| random..
где словарь представляет собой файл с именем d в том же каталоге.Желе , 22 байта
Монадическая ссылка, содержащая список символов, проанализированный словарь (как разрешено в чате ).
Попробуйте онлайн!(Нажмите «Аргументы», чтобы скрыть словарь и уменьшить необходимость прокрутки.)
Как?
Поскольку словарь содержит только допустимые слова (
4
символы или более, только[a-z]
), нет необходимости проверять это условие.Поскольку все слова в словаре имеют длину,
[4-8]
возможны длины пароля[16,32]
, и возможные энтропии никогда не будут округляться по-другому с точностью до одного десятичного знака, чем путем заменыlog(52,2)
на5.7
. Единственная проблема заключается в том , что , используя значение с плавающей точкой5.7
даст с плавающей точкой ошибок округления для длин18
,26
и31
. Однако, умножение на57
и затем деление на10
использование×57÷⁵
позволяет избежать этого (оставаясь на один байт короче, чем вывод значения полной точности с плавающей запятой с использованием×52l2¤
).источник
Рубин,
8983 байтаПредполагается, что пароли хранятся в переменной
d
. Вы можете добавить эту строку перед кодом:и вызвать скрипт, например, так:
Образец вывода:
KitchenMiseryLurkJoints ... вау.
-6 байт от Ajedi32
источник
shuffle!
и заменивpop
наsample
.A word cannot reappear in the same password
, полагая, что оно не означает повторного использования слов во всех паролях. Спасибо :)Mathematica, 178 байт
Попробуйте онлайн
скопируйте и вставьте, используя Ctrl-V и нажмите Shift + Enter, чтобы запустить
Mathematica, 136 байт
при условии, что м словарь код
,
источник
hosts
файла).удар ,
6665 байтПопробуйте онлайн!
Словарь получен от STDIN. Перемешивает все слова в словаре и выводит первые 4.
Для каждого слова складывает его длину в var l и повторяет слово с заглавной буквы. В конце звонит БК, чтобы сделать математику.
Решение Awk, 112 байт, четыре пароля:
источник
(Это адаптация ответа Мартмистов, но у меня нет представителя, чтобы комментировать)
Python,
8886 байтИспользуя
set
недетерминированный метод, вы можете избежать импорта любых библиотек случайности.источник
set(f).pop()
.set(f).pop()
не работает, я попробовал. Это дает один и тот же результат каждый раз.Japt , 30 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 164 байта
Предполагается, что словарь передается функции в виде массива.
Тестовый фрагмент
источник
Mathematica, 71 байт
Предполагая, что словарь уже загружен в массив с именем
d
.Explaination:
источник
ColdFusion 216 байт
Это работает в ColdFusion 11+ и Lucee 4.5+
Чтобы запустить это: https://trycf.com/gist/ff14e2b27d66f28ff69ab90365361b12/acf11?theme=monokai
Ссылка на TryCF имеет меньший код, но тот же код.
Я действительно не ожидал получить конкурентоспособный ответ в гольф; Я просто хотел посмотреть, что нужно сделать для решения этой проблемы в ColdFusion. Тем более, что в этих ответах не так много CF :-) После установки он оказался на удивление короче, чем я ожидал.
Моя первая попытка была немного короче, пока я не вспомнил, что одно и то же слово нельзя использовать более одного раза. Несмотря на то, что весьма маловероятно, что рандомизатор выберет один и тот же индекс более одного раза, я добавлю индексы в ключи структуры, что предотвратит дублирование. Затем я использую этот список ключей для построения моей последней строки пароля. Я также использовал математический трюк, чтобы найти энтропию.
источник
PHP ,
136129 байт-7 байт, спасибо Йорг
Попробуйте онлайн!
источник
Python 3, 252 байта
Это мой первый в мире тест по коду для игры в гольф! Я знаю, что здесь есть другие ответы Python (которые, вероятно, лучше, чем у меня), но это выглядело забавно, и я все равно хотел попробовать. Вот версия для гольфа:
Я хотел бы опубликовать попробовать онлайн! ссылка, но это не поддерживает несколько файлов. Итак, вот ссылка на repl.it: https://repl.it/InIl/0
Кроме того, вот версия без заглатывания:
Как я уже сказал, это мой первый раз, когда я думаю о коде, поэтому я уверен, что это можно было бы значительно улучшить.
источник
ткл, 137
Не победитель, конечно, но я думаю, что это может быть игра в гольф немного больше.
demo - цель строки 1 состоит только в том, чтобы поместить содержимое словаря в переменную
d
источник
Vim, 87 нажатий клавиш
Предполагается, что словарь находится в файле с именем
w
. Всегда будет использовать 4 слова подрядОбъяснение:
источник
q / kdb +,
76746556 байтРешение:
Пример:
Объяснение:
Прочитайте в списке слов, разбейте на части на "", выберите 4 случайных слова из этого списка, заглавную первую букву каждого слова, затем объедините. Подайте это в лямбда-функцию, которая возвращает пароль и вычисленную энтропию:
Заметки:
Я сдался и использовал 5.70044 вместо
2 xlog 52 xexp
...источник