Go Gin使用Bcrypt加密密码响应耗时500-900ms是什么原因?
Bcrypt加密高耗时问题原因说明
这个高耗时属于bcrypt算法的设计特性,并不是包本身存在bug,核心原因如下:
- 成本因子(cost)设置过高:你调用
bcrypt.GenerateFromPassword时传入的第二个参数值为12,bcrypt的计算耗时和2的cost次方成正比,cost=12意味着底层需要执行4096次哈希迭代,在普通服务器CPU上的耗时刚好落在500ms~1000ms区间,这个设计的目的是对抗暴力破解攻击,即使密码哈希泄露,攻击者破解单个哈希的成本也会非常高。 - 场景适配问题:bcrypt是专门为用户密码存储这类低频场景设计的,如果你在每个普通接口请求中都执行bcrypt加密(如示例代码中的GET接口每次请求都做哈希操作),自然会出现接口响应慢的问题,真实业务中仅需在用户注册、修改密码这类低频操作时执行bcrypt加密即可。
优化建议
如果需要平衡安全和响应速度,可以根据业务要求适当调低cost值:
cost每降低1,加密耗时就会减半,比如调整到10时,加密耗时会降到100ms~200ms区间,大部分业务场景下这个安全强度已经足够。
另外你当前代码中忽略了bcrypt.GenerateFromPassword返回的错误,建议补充错误处理逻辑,避免异常场景下未生成有效哈希的问题。
内容的提问来源于stack exchange,提问作者ser
相关产品推荐
相关产品推荐

