Golang bcrypt怎么加密密码_Golang密码加密教程【对比】

张开发
2026/4/16 22:07:14 15 分钟阅读

分享文章

Golang bcrypt怎么加密密码_Golang密码加密教程【对比】
bcrypt.GenerateFromPassword需传[]byte明文和cost推荐bcrypt.DefaultCost12明文超72字节会被静默截断校验必须用bcrypt.CompareHashAndPassword防时序攻击哈希值为ASCII字符串$2a$/$2b$开头存数据库用string(hashed)。bcrypt.GenerateFromPassword 怎么用才不翻车直接传明文和 cost 就能出哈希但翻车点全在参数和类型上GenerateFromPassword 第一个参数必须是 []byte不是 string第二个参数别硬写 10 或 15优先用 bcrypt.DefaultCost当前是 12它平衡了安全与响应延迟。明文超 72 字节会被静默截断——password123 和 password123xxxxxxxxxx... 哈希结果一样务必在入参前做长度校验比如限制 8–64 字符别自己拼 salt、别用 sha256 或 md5 加盐后比对——bcrypt 内置随机 salt每次调用生成的哈希都不同这是防彩虹表的核心哈希结果是 ASCII 字符串以 $2a$、$2b$ 开头存数据库时直接用 string(hashed) 转别存 []byte 二进制否则读出来乱码或报错为什么必须用 bcrypt.CompareHashAndPassword 校验手写 或 bytes.Equal 会触发 timing attack时序攻击攻击者通过比对耗时差异反推密码字符。而 CompareHashAndPassword 是恒定时间比对无论前几位是否匹配执行时间都一致。参数顺序不能反第一个是数据库里存的哈希字符串转成的 []byte第二个才是用户提交的明文密码 []byte返回 nil 表示匹配成功其他错误比如 bcrypt.ErrMismatch都算失败别只判 err ! nil 就完事——要明确处理不匹配场景哈希前缀只支持 $2a$ 和 $2b$如果从旧系统迁移过来遇到 $2y$得先升级库或转换格式否则直接 paniccost 设成多少才合理cost 不是越高越好也不是默认最省事。2026 年主流服务端硬件下cost12即 DefaultCost是实测平衡点注册耗时约 150–250ms不影响用户体验暴力破解成本足够高且不会在登录高峰拖垮 CPU。设成 10太低现代 GPU 几秒就能跑千万次尝试设成 14 以上单次哈希可能突破 1s高并发登录接口容易超时或积压别在开发环境用 cost4 测试——行为偏差大上线后才发现性能崩了常见错误现象和定位线索哈希值长得一样密码总校验失败接口突然变慢这些都不是玄学基本都能对应到具体操作失误 Mokker AI AI产品图添加背景

更多文章