awk中length()函数用于字符串长度筛查,可识别空密码、过短(<6)、超长(>64)、纯数字等异常密码,结合正则和条件判断实现多维度初步检测,但仅作辅助分析不替代密码强度校验。

在 awk 中,length() 是获取字符串长度的内置函数,常用于检查字段是否过短或过长——这对识别潜在的弱密码或异常密码字段(如空值、单字符、超长乱码)非常实用。注意:awk 本身不加密也不校验密码强度,它只做长度层面的初步筛查。
用 length() 检查密码字段是否为空或过短
假设日志或 CSV 中密码在第 3 列(例如:user,uid,password),可筛选长度小于 6 的记录(常见弱密码阈值):
awk -F',' 'length($3) < 6 {print "短密码:", $0}' file.csv
说明:
- $3 表示第三字段(密码列),确保字段分隔符 -F 设置正确(如逗号、制表符等)
-
length($3) 返回字符串实际字节数(对 ASCII 密码即字符数;含中文/UTF-8 多字节时需注意,GNU awk 4.2+ 支持
length($3)按字符计,但默认 locale 下可能仍按字节) - 空字符串
length("") == 0、单字符length("a") == 1都会被捕获
排除空白和纯空格密码
仅靠 length($3) 无法区分 " "(空格)和真正空值。需先去空再判断:
awk -F',' '{pwd = $3; gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", pwd)} length(pwd) == 0 {print "空白密码:", $0}' file.csv
关键点:
- 用 gsub() 去掉首尾空白(包括空格、制表符、换行、回车)
- 对清理后的
pwd取 length(pwd),为 0 即判定为无效密码 - 避免误报:原始 $3 可能是 " 123 ",清理后是 "123",length=3 → 属于短密码,但非空白
检测超长密码(防填充或编码异常)
某些系统限制密码最大长度(如旧版 Linux PAM 默认 8–16 字符),超长可能表示 Base64 编码错误、日志截断残留或恶意填充:
awk -F',' 'length($3) > 64 {print "超长密码(疑似编码/填充):", $0}' file.csv
建议阈值参考:
- 明文密码:一般 ≤ 64 字符(如 bcrypt 哈希前原文通常不超此限)
- Base64 编码密码:长度应为 4 的倍数,且原始字节数 ≈ length×0.75;若出现非 4 倍数长度,可能损坏
- 可叠加检查:
length($3) > 64 && length($3) % 4 != 0筛选可疑 Base64
结合多条件一次性筛查异常密码
把空、过短、超长、全数字等常见风险合并输出:
awk -F',' '
{
pwd = $3
gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", pwd)
l = length(pwd)
}
l == 0 {print "【空】", $0; next}
l < 6 {print "【过短】", $0; next}
l > 64 {print "【超长】", $0; next}
pwd ~ /^[0-9]+$/ {print "【纯数字】", $0}
' file.csv
说明:
- 每个条件独立判断,用 next 避免重复匹配
- pwd ~ /^[0-9]+$/ 是正则匹配纯数字密码(典型弱密码)
- 实际使用中,建议先导出异常行再人工复核,不直接用于生产环境密码拦截

















