注册加解密流程梳理

大家好,我是欧达克。

不知道大家工作中是否有参与过注册登录流程,你们公司的注册登录都是怎么做的呢?最近在梳理注册登录流程,发现注册登录时对密码的加解密挺有讲究的,都知道密码不能明文传输,注册时前端加密,服务端解密,流程能说个一二,但是整体怎么做似乎又说不上来。我们将从最简单的加密流程一直升级到复杂系统,看看都是怎么做的。

明文传输

对你们听错,很多早期的论坛、小网站直接明文存储密码,或简单 Base64 编码,相当于裸奔!

前端单向哈希

前端使用 MD5、SHA256 等哈希算法,将密码加密后传给服务端。虽然避免了明文传输和存储,但是都容易被彩虹表暴力破解,也无法防止重放攻击,同时哈希也降低了密码的熵。

加盐哈希

为每个用户分配一个盐值,服务端存储盐值+哈希值。能够防御彩虹表攻击,但是弱密码可以被暴力破解,同时传输层未加密,盐值也可能被截获。从技术实现的角度,前端在加密前,必须获取对应的盐值,服务端也必须为每个用户存储单独的盐值,提高了系统设计复杂度。

传输层加密+慢哈希算法

使用 HTTPS 加密传输,防窃听、防篡改、身份验证,不再担心前后端数据传输过程中的安全性。同时慢哈希算法(如 bcrypt、PBKDF2)也使得暴力破解的成本更高,从实现上不需要我们单独存储盐值,算法直接将盐值保存在密文中。

非对称加密

前端使用 HTTPS + 公钥加密双重保护,服务端先通过密钥管理服务获取私钥,确定是通过公钥加密后的密文,再通过慢哈希算法加密,保存到数据库中,这种方式已经足够安全可靠了。

但是对于一些特别的行业,是不允许服务端拿到明文密码的,比如我前司是做钱包相关业务的,明确规定,服务端任何情况下,不管是内存还是数据库(这里更不用说日志了),都不能出现明文密码。所以在该方案的基础上做了升级,前端在使用公钥加密前,先对明文密码哈希加密,其他流程保持不变。

总结

现在的认证已经越来越去密码化了,很多都采用生物识别➕硬件保护的方式。密码安全是攻防对抗和技术迭代的持续过程,所有方案都需平衡安全性、用户体验与合规要求。我个人的自建小网站,也是采用的前端公钥加密,服务端私钥解密+慢哈希存储的方式,整体方案和前司没什么区别(前司因为合规加了哈希),无非就是在一些认证方式、风控识别、密钥管理工具(AWS KMS)等方面的差异。

相关推荐
weixin1997010801612 分钟前
【性能提升300%】仿1688首页的Webpack优化全记录
前端·webpack·node.js
冰暮流星22 分钟前
javascript之数组
java·前端·javascript
晚霞的不甘1 小时前
Flutter for OpenHarmony天气卡片应用:用枚举与动画打造沉浸式多城市天气浏览体验
前端·flutter·云原生·前端框架
xkxnq1 小时前
第五阶段:Vue3核心深度深挖(第74天)(Vue3计算属性进阶)
前端·javascript·vue.js
三小河1 小时前
Agent Skill与Rules的区别——以Cursor为例
前端·javascript·后端
Hilaku1 小时前
不要在简历上写精通 Vue3?来自面试官的真实劝退
前端·javascript·vue.js
三小河1 小时前
前端视角详解 Agent Skill
前端·javascript·后端
Aniugel2 小时前
单点登录(SSO)系统
前端
鹏多多2 小时前
移动端H5项目,还需要react-fastclick解决300ms点击延迟吗?
前端·javascript·react.js
serioyaoyao2 小时前
上万级文件一起可视化,怎么办?答案是基于 ParaView 的远程可视化
前端