首页/安全/加密与证书速查/Unix 口令散列格式(crypt 前缀)
加密算法基础95 条

Unix 口令散列格式(crypt 前缀)

类 Unix 系统的 crypt 散列字符串以 $id$ 前缀标识算法:$1$ MD5、$5$ SHA-256、$6$ SHA-512、$y$ yescrypt、$2b$ bcrypt,识别前缀即可判断强度与迁移方向。

加密与证书速查安全更新于 2026-10-13

口令散列格式怎么看

类 Unix 系统的口令散列字符串以固定的标识前缀区分算法,前缀不同代表算法与迭代成本不同。识别前缀可以快速判断强度与迁移方向:早期算法已不适合安全用途,较新的算法默认迭代次数偏低,现代发行版默认使用的方案成本更高。这类格式面向系统账户,Web 应用应使用专用口令算法。

基本信息

前缀标识以分隔符包裹的算法标识
早期算法强度已不足,不适合安全用途
较新算法默认迭代次数偏低,需按场景评估
现代默认当前发行版常用方案成本更高

典型使用场景

  • 审计:查看系统账户口令的散列方式
  • 迁移评估:判断哪些账户需要重新设置口令
  • 合规检查:确认散列算法符合基线要求
  • 排错:跨系统迁移账户时格式不兼容
  • 生成:在脚本中生成指定格式的散列字符串

生成散列字符串

生成散列字符串
openssl passwd -6 -salt 0011223344556677 'P@ssw0rd'   # 生成 SHA-512 crypt 散列
mkpasswd -m sha-512 'P@ssw0rd'                         # 部分发行版提供
cut -d: -f2 /etc/shadow | cut -c1-3                    # 只看前缀判断算法
# 注意:查看该文件需要相应权限

前缀对照

前缀算法备注
$1$早期散列算法不适合安全用途
$5$SHA-256 系默认迭代偏低
$6$SHA-512 系默认迭代偏低
$2b$成本参数算法成本决定迭代强度
这类格式面向系统账户;Web 应用应使用成本更高的专用口令算法,而不是直接沿用系统散列格式。

落地建议

  • 把散列前缀纳入账户审计项
  • 对旧算法账户在下次登录时强制重置口令
  • 为服务账户单独评估成本参数
  • 跨系统迁移时核对目标系统支持的格式
较新算法的默认迭代次数是本地登录场景的取值,直接用于面向公网的服务端口令校验会明显偏低,应对成本参数单独评估并提高。

审计要点

  • 统计系统中各类前缀的实际数量分布
  • 找出仍使用早期算法的账户清单
  • 核对服务账户与交互账户的强度要求差异
  • 确认口令重置流程会在下次登录时升级散列
散列值中的盐值通常随算法一同编码在字符串里,因此同一口令在不同账户上会得到不同结果,这可以抵御预先计算的对照表,但不改变算法本身的强度。

易错点

  • 把散列前缀当成加密等级看,误判强度
  • 把默认迭代次数的系统散列直接用于 Web 登录,强度偏低
  • 跨系统迁移账户时忽略格式兼容性,导致无法登录
  • 只改算法不改迭代成本,强度提升有限
  • 在同一文件中混用多种格式而不记录,后续审计混乱
  • 把散列值当中可逆密文看待,误以为可以还原原始口令

数据来源与参考

  • crypt(5) man 手册
  • glibc 手册(Password and Authentication)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌