答案1
首先,安装您熟悉的语言的字典,使用:
sudo apt-get install <language-package>
要查看所有可用的包:
apt-cache search wordlist | grep ^w
笔记:所有安装说明均假设您使用的是基于 Debian 的操作系统。
安装字典后运行:
WORDS=5; LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${WORDS} | paste -sd "-"
这将输出前:
blasphemous-commandos-vasts-suitability-arbor
分解它:
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"
}
或者
#!/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"
}
两者都可以这样称呼:
memorable_password 7 _
memorable_password 4
memorable_password
返回:
skipped_cavity_entertainments_gangway_seaports_spread_communique
evaporated-clashes-bold-presuming
excelling-thoughtless-pardonable-promulgated-forbearing
奖金
对于一个书呆子和有趣但不是很安全的密码,不需要安装字典,您可以使用(由@jpa提供):
WORDS=5; man git | \
tr ' ' '\n' | \
egrep '^[a-z]{4,}$' | \
sort | uniq | \
shuf --random-source=/dev/urandom -n ${WORDS} | \
paste -sd "-"
答案2
我不会使用未考虑加密使用的标准实用程序来执行此操作。没有理由相信他们正在使用 csPRNG 或者他们正在正确播种它,并且知道您的方法的人将能够重现您的密码短语。同样,如果您不确定如何正确使用多用途实用程序,请对其进行操作。
pwqgen
从passwdqc
。
答案3
你需要一本字典,因为你提到了比特币,你很可能需要这个:
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
如果您的母语不是英语,则同一存储库中提供其他语言的单词列表。
给定这个 english.txt 文件,您可以使用以下命令进行随机选择shuf
:
$ shuf -n 4 english.txt
anchor
neck
trumpet
response
请注意,要获得真正安全的密码,您需要的不仅仅是 4 个单词。 4 个单词适用于攻击者可能尝试的次数非常有限的在线服务。我觉得比特币推荐是16个字,不确定。
同样在这个例子中,每个单词只能出现一次。如果您希望允许重复的单词,请添加选项--repeat
:
$ shuf -n 4 -r english.txt
这将允许每个单词出现多次。
如果你想在一行中输出,你可以添加xargs echo
:
$ shuf -n 4 english.txt | xargs echo
math easily cube daughter
或者,如果您更喜欢命令替换:
$ echo $(shuf -n 4 -r english.txt)
photo milk roast ozone
顺便说一句,我认为这种风格的密码不容易记住。
嗯,实际上我很幸运,math easily cube daughter
因为这恰好让我很容易想到一个故事,你的女儿可以轻松地用立方体或其他东西做数学。这是人类能够产生共鸣的东西,就像 XKCD 例子中的马一样。
但 a 到底是什么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
答案4
尝试这个,
shuf --random-source=/dev/urandom -n5 /usr/share/dict/words | sed 's/[^[:alnum:]]//g' | paste -sd_
输出:
Quayles_knockwursts_scrotums_Barrie_hauler
解释:
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