注册账号时,网站总要求"至少8位,含大小写字母、数字和符号",很多人嫌麻烦,随手填个生日或"123456"。这不是网站故意刁难你:密码常常是被机器按规律批量猜试出来的,也可能被钓鱼、恶意软件或网站泄露直接拿走。 密码强度衡量的就是一件事——把所有可能的密码挨个试一遍,轮到你这个需要多久。
算笔账就明白了。假设你的密码是 6 位纯数字,比如生日 950812,那一共只有 100 万种可能(000000 到 999999)。如果坏人拿到了某网站泄露出来的密码数据,在自己电脑上离线试,如果采用一个便于比较的假设:每秒能离线试100亿次,那么100万种组合只需0.0001秒就能试完。若12位密码的每一位都从95种字符中独立随机选取,约有5.4×10²³种组合,按相同速度穷举全部约需170万年。实际速度受密码哈希算法、参数和硬件影响很大,人的常见组词也不能按完全随机计算。这就是"弱"和"强"的差别:不是感觉上的,是试完所需时间上的天壤之别。
长度差一点,组合数差很远
- 016位纯数字
100万种组合
- 0212位随机混合
约5.4×10²³种组合
仅为离线穷举比较,假设每秒100亿次;随机性、哈希算法和其他攻击都影响风险。
密码不是被猜中的,是被机器试出来的
坏人手里的试法主要有三种,一种比一种狠:
1. 撞库:拿你泄露过的密码直接试。 很多网站丢过用户数据,这些泄露的账号密码在网上流传。坏人拿着"邮箱+旧密码"去别的网站批量登录——如果你在好几个网站用同一个密码,一个网站出事,其他账号跟着遭殃。
2. 字典攻击:先试"大家最爱用的那些"。 每年泄露密码排行榜上,"123456"常年稳坐第一,后面跟着"password""qwerty"、生日、手机号、名字拼音这些。坏人不用穷举,先拿这份几亿条的热门密码清单过一遍,就能蒙中一大批账号。连"P@ssw0rd""a1b2c3"这种自以为聪明的变形,也早就在字典里了。
3. 暴力破解:挨个穷举所有组合。 前两招都不中,才轮到穷举。这时候决定胜负的就只剩一个数字:你的密码总共有多少种可能。组合越多,试完越久,久到不划算,这条破解路线就难走了,但仍要防钓鱼和泄露。
什么样的密码扛试
长度是第一位的,随机多一位,组合数就会按可选字符数增长。 6 位纯数字是 100 万种可能;12 位混合字符是 24 位数量级的可能。对抗穷举,没有比重头加长度更划算的办法。一个由几个不相干的词拼成的长密码(比如"土豆雨伞高铁冰箱"这类),比"Zx@9"这种短而怪的密码强得多,还好记。
杂度有用,但"换皮"没用。 大小写、数字、符号混着用,确实能把每种可能的总数放大。但把 o 换成 0、a 换成@,这种套路人人都知道,字典里全收录了,等于没换。
和你有关的信息,等于白送。 生日、手机号、身份证后几位、名字拼音、宠物名字——坏人试密码时最先试的就是这些,因为它们从泄露数据和你的公开动态里就能凑出来。密码里包含任何"查得到、猜得着"的东西,会让攻击者更容易缩小猜测范围。
两个常见误会
误会一:符号越怪越安全。 "Jv#2!"看着唬人,其实只有 5 位,穷举起来很快;不相关词随机拼成的长口令通常更抗猜;顺口句、名句和本文例子仍可能被列入猜测清单,不要直接拿来当密码。符号的作用是和长度配合,不是替代长度。
误会二:我设一个很强的密码,所有账号都用它。 再强的密码也怕网站被拖库——密码泄露往往不是因为你设得弱,而是某个网站自己没存好。所以"一个密码走天下"的意思不是省事,是一个窟窿淹掉所有船。记不住那么多密码很正常,密码管理器这类工具就是干这个的;重要账号再开上双重验证,就算密码真泄露了,对方也还差一道门。