mob*_*lie 44 scripting password shell-script
什么是生成易于记忆的密码的好单行代码,例如 xkcd 的正确马电池主食或比特币种子?
编辑 1:
这与生成随机字符串不同,因为随机字符串根本无法记忆。与强制性的 xkcd 相比......
mee*_*ian 42
首先,安装一个你熟悉的语言的字典,使用:
sudo apt-get install <language-package>
Run Code Online (Sandbox Code Playgroud)
查看所有可用的包:
apt-cache search wordlist | grep ^w
Run Code Online (Sandbox Code Playgroud)
注意:所有安装说明都假设您使用的是基于 debian 的操作系统。
安装字典后运行:
WORDS=5; LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${WORDS} | paste -sd "-"
Run Code Online (Sandbox Code Playgroud)
这将输出 ex:
blasphemous-commandos-vasts-suitability-arbor
Run Code Online (Sandbox Code Playgroud)
分解:
WORDS=5; — 选择您想要的密码字数。LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words— 仅选择包含小写字母字符的单词(不包括其中的单词'或像 in 之类的时髦字符éclair)。LC_ALL=C确保[a-z]在正则表达式中不会匹配没有变音符号的小写字母以外的类似字母的符号。shuf --random-source=/dev/urandom -n ${WORDS}-根据您的要求选择尽可能多的单词。--random-source=/dev/urandom确保shuf安全地播种其随机生成器;没有它,shuf默认为安全种子,但在某些系统上可能会回退到非安全种子,例如 Windows 上的某些 Unix 仿真层。paste -sd "-"- 使用连接所有单词-(随意将符号更改为其他内容)。或者,您可以将其包装在一个函数中:
#!/bin/bash
function memorable_password() {
words="${1:-5}"
sep="${2:--}"
LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${words} | paste -sd "$sep"
}
Run Code Online (Sandbox Code Playgroud)
或者
#!/bin/sh
memorable_password() {
words="$1"
if [ -z "${words}" ]; then
words=5
fi
sep="$2"
if [ -z "${sep}" ]; then
sep="-"
fi
LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${words} | paste -sd "$sep"
}
Run Code Online (Sandbox Code Playgroud)
两者都可以这样调用:
memorable_password 7 _
memorable_password 4
memorable_password
Run Code Online (Sandbox Code Playgroud)
返回:
skipped_cavity_entertainments_gangway_seaports_spread_communique
evaporated-clashes-bold-presuming
excelling-thoughtless-pardonable-promulgated-forbearing
Run Code Online (Sandbox Code Playgroud)
对于不需要安装字典的书呆子和有趣但不是很安全的密码,您可以使用(由@jpa 提供):
WORDS=5; man git | \
tr ' ' '\n' | \
egrep '^[a-z]{4,}$' | \
sort | uniq | \
shuf --random-source=/dev/urandom -n ${WORDS} | \
paste -sd "-"
Run Code Online (Sandbox Code Playgroud)
R..*_*ICE 38
我不会使用在设计时没有考虑到加密用途的标准实用程序来执行此操作。没有理由相信他们正在使用 csPRNG 或他们正在正确地播种,并且知道您的方法的人将能够重现您的密码。同样,如果您不确定如何正确使用多功能实用程序,请使用它们。
pwqgen从passwdqc.
fro*_*utz 13
你需要一个词表词典,因为你提到了比特币,很可能你想要这个:
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
如果您的母语不是英语,则同一存储库中还有其他语言的词汇表。
鉴于此 english.txt 文件,您可以使用以下命令进行随机选择shuf:
$ shuf -n 4 english.txt
anchor
neck
trumpet
response
Run Code Online (Sandbox Code Playgroud)
请注意,您需要的不仅仅是 4 个单词才能获得真正安全的密码。4 word 是针对攻击者可能进行的尝试次数非常有限的在线服务。我认为比特币推荐是16个字,不确定。
同样在这个例子中,每个词可能只出现一次。如果您希望允许重复单词,请添加--repeat选项:
$ shuf -n 4 -r english.txt
Run Code Online (Sandbox Code Playgroud)
这将允许每个单词出现不止一次。
如果你想在一行中输出,你可以添加xargs echo:
$ shuf -n 4 english.txt | xargs echo
math easily cube daughter
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢命令替换:
$ echo $(shuf -n 4 -r english.txt)
photo milk roast ozone
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我认为这种密码风格不容易记住。
嗯,实际上我很幸运,math easily cube daughter因为这恰好让你很容易想到一个故事,你的女儿可以很容易地用立方体或其他东西做数学。这是人类可以与之相关的东西,就像 XKCD 示例中的马一样。
但到底是anchor neck trumpet response什么?我不是一个有创造力的漫画书作者,可以为此想出一个助记符。所以很快就会被遗忘。
即使你能记住单词,也很难记住它们的正确顺序。是不是math easily cube daughter或者daugher easily math cube还是其他什么东西?
并且密码应该是随机的,不允许随意修改。
至于比特币种子,你真的不应该记住它们。这只是一种能够轻松写下来的方法。任何人都可以在一张纸上写下 16 个单词并正确地读出来;使用随机字母更容易出错。
如果您担心 的随机性shuf,请将--random-source=/dev/urandom参数添加到所有shuf命令中。
另见https://www.gnu.org/software/coreutils/manual/html_node/Random-sources.html#Random-sources
gle*_*man 10
我有这个:
xkcd_password () {
command grep "^[[:alpha:]]\{5,8\}$" "${1-/usr/share/dict/words}" | sort --random-source=/dev/urandom -R | head -4
}
Run Code Online (Sandbox Code Playgroud)
尝试这个,
shuf --random-source=/dev/urandom -n5 /usr/share/dict/words | sed 's/[^[:alnum:]]//g' | paste -sd_
Run Code Online (Sandbox Code Playgroud)
输出:
Quayles_knockwursts_scrotums_Barrie_hauler
Run Code Online (Sandbox Code Playgroud)
说明:
shuf --random-source=/dev/urandom -n5 /usr/share/dict/words 从 dict 文件中获取 5 个随机单词sed 's/[^[:alnum:]]//g' 删除非字母数字字符paste -sd_, 用下划线 ( _)连接单词您可以使用 Internet 上的任何单词表文件而不是/usr/share/dict/words.
如果没有的话,请安装单词表。它可能在您的发行版存储库中,例如https://packages.debian.org/sid/wordlist:
sudo apt install wamerican
Run Code Online (Sandbox Code Playgroud)