奖金

奖金

有什么好的单行文字可以生成易于记忆的密码,例如 xkcd 的正确马电池主食或比特币种子?

编辑1:

这与生成一个随机字符串因为随机字符串根本无法记住。与强制 xkcd...

答案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 或者他们正在正确播种它,并且知道您的方法的人将能够重现您的密码短语。同样,如果您不确定如何正确使用多用途实用程序,请对其进行操作。

pwqgenpasswdqc

答案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

相关内容