现在这个问题下面的回答我看了一圈,要么不好记,要么不安全,要么既不好记又不安全。
实际上最好的方案叫做 diceware,有一篇 xkcd 漫画生动地描述了它:
Password Strength
diceware 的核心思想是,用一个硬件真随机数生成器——骰子——连续投掷 5 次,从而产生一个 5 位六进制随机数,也就是从 0 到 7775(即 6 的 5 次方减 1)之间的一个随机数,然后使用一张预先制作好的共有 7776 个单词的单词表,根据获得的随机数取出一个单词。因为从这张表中取出单词的方式是完全随机的(通过掷骰子获得),所以即使你公开你使用的单词表,别人也没法猜出你选择的是哪个单词,最好的情况也只能暴力破解。
当然,一个单词肯定是不够的,它只有 7776 种可能。diceware 官网建议使用 6 个这样随机生成的单词,这相当于 log2(6 ** (5*6)) ≈ 77.5 比特的熵,对绝大部分情况来说已经足够安全了。这样,你只需要记下 6 个有意义的单词,而不需要记忆一串奇怪且无意义的随机字母数字组合。
更多有关信息推荐阅读 diceware 官网的介绍。如果你觉得英语单词太陌生,diceware 官网也给出了一张使用中文拼音(全拼)的单词表,你可以用它来生成你的密码。
另一方面,由于不推荐不同的帐号使用相同的密码(一旦一个网站泄露,其它网站使用相同密码的帐号也会被攻破),虽然这么做能得到一个足够安全且相对好记的密码,当你需要很多不同的密码时这仍然不方便。因此推荐使用一个密码管理器,例如 keepassxc,你可以用一个主密码来加密密码数据库,这样就只需要记忆一个主密码就可以了,其它密码直接由密码管理器来生成和存储,密码管理器也大大提高了便利性。