Algorithm 语音记忆密码生成算法 背景
前几天在健身房时,我正在使用我的组合锁,我意识到一些东西对我这个程序员来说是有用的。也就是说,我的组合是三组不同的数字,它们要么听起来相似,要么有其他关系,使它们易于记忆。例如,5-15-25,7-17-2,6-24-5。这些例子似乎很容易记住 问题: 我如何为密码实现类似的功能?是的,它们应该很难破解,但最终用户也应该很容易记住它们。组合锁通过混合具有相似声音的数字和具有相似属性的数字来实现这一点(7-17-23:全部素数,17在7之后从舌头上滚下来,23是另一个素数,并且(在该集合之外)是“难以”记住的) 标准Algorithm 语音记忆密码生成算法 背景,algorithm,security,language-agnostic,passwords,Algorithm,Security,Language Agnostic,Passwords,前几天在健身房时,我正在使用我的组合锁,我意识到一些东西对我这个程序员来说是有用的。也就是说,我的组合是三组不同的数字,它们要么听起来相似,要么有其他关系,使它们易于记忆。例如,5-15-25,7-17-2,6-24-5。这些例子似乎很容易记住 问题: 我如何为密码实现类似的功能?是的,它们应该很难破解,但最终用户也应该很容易记住它们。组合锁通过混合具有相似声音的数字和具有相似属性的数字来实现这一点(7-17-23:全部素数,17在7之后从舌头上滚下来,23是另一个素数,并且(在该集合之外)是“
- 密码应该容易记住<代码>狗!Wolf很容易记住,但一旦攻击者知道您的网站提供了该组合,它就会使检查变得非常容易
- 单词或字母大部分应跟随相同的发音(大部分)
- 至少8封信
- 不使用
这些标点符号虽然适用于“硬”密码,但没有“易于记忆”的声音!@$%^&*();'{}}{+?,./
您可以使用马尔可夫链生成听起来像英语(或您想要的任何其他语言)的单词,但它们不是实际单词 容易记忆的问题是非常主观的,所以我不认为你能写出这样一个对每个人都有好处的算法
为什么在网站/计算机应用程序上使用短密码而不是传递短语?它们很容易记住,但很难破解。首先要确保密码很长。考虑使用一个“通行短语”,而不是一个“通行字”。打破像“狗和狼互相憎恨”这样的口头禅是很难的,但它们很容易记住 有些网站可能会给你一些有用的建议,比如(链接自,这本身就是一个有用的工具)
此外,在某些情况下,一个更好的替代方法不是试图创建易于记住的密码,而是通过使用(并教育用户使用)一个好的密码管理实用程序(请参阅)来避免记住密码-在执行此操作时,剩下的唯一部分是创建一个很容易破解的密码(任何足够长的随机句子都可以)。看看。该软件包也可以在Debian/Ubuntu存储库中找到。您可能想看看:
- 中使用并解释的可宣告密码生成算法
因此,如果用户必须立即更改密码,那么为用户生成易于记忆的密码是没有帮助的。如果用户不立即更改密码,则会出现其他问题。FWIW我非常喜欢将单词音节混在一起,以获得一个简单但基本上是随机的密码。以“邦戈”为例例如,作为一个随机词。交换音节,你会得到“Gobong”。将o替换为顶部的零(或其他一些常见的替换),你会得到一个基本上随机的字符序列,带有一些线索,帮助你记住它
现在,如何通过编程选择音节——这是一个完全不同的问题!系统生成的密码对于内部服务帐户或临时重置(等等)以外的任何东西都是一个坏主意 你应该始终使用自己的“密码短语”,这些短语很容易记住,但几乎不可能猜测或使用暴力。例如,我以前大学帐户的密码是
在这里再次学习!
这是20个字符,使用上下两个字符
"A specter is haunting Europe - the specter of communism."
asihe-tsoc
#! /bin/bash
RANDOM=$$
WORDSFILE=./simple-words
DICTFILE=/usr/share/dict/words
grep -ve '[^a-z]' ${DICTFILE} | grep -Ee '^.{4,6}$' > ${WORDSFILE}
N_WORDS=$(wc -l < ${WORDSFILE})
for i in $(seq 1 20); do
password=""
while [ ! "${#password}" -ge 8 ] || grep -qe"^${password}$" ${DICTFILE}; do
while [ -z "${password}" ]; do
password="$(sed -ne "$(( (150 * $RANDOM) % $N_WORDS + 1))p" ${WORDSFILE})"
builtfrom="${password}"
done
word="$(sort -R ${WORDSFILE} | grep -m 1 -e "^..*${password:0:1}")"
builtfrom="${word} ${builtfrom}"
password="${word%${password:0:1}*}${password}"
done
echo "${password} (${builtfrom})"
done
perl -pe 's/[^a-z]+/\n/gi' ./624425.txt | tr A-Z a-z | sort -u > ./words
ispell -l ./words | grep -Fvf - ./words > ./simple-words
backgroundied (background died)
soundecrazy (sounding decided crazy)
aboupper (about upper)
commusers (community users)
reprogrammer (replacing programmer)
alliterafter (alliteration after)
actualetter (actual letter)
statisticrhythm (statistical crazy rhythm)
othereplacing (other replacing)
enjumbling (enjoying jumbling)
feedbacombination (feedback combination)
rinstead (right instead)
unbelievabut (unbelievably but)
createdogso (created dogs so)
apphours (applications phrase hours)
chainsoftwas (chains software was)
compupper (computer upper)
withomepage (without homepage)
welcomputer (welcome computer)
choosome (choose some)
"But I should have known this right from the start"
ahmouryleg
thasylecta
tronicatic
terstabble