注册加解密流程梳理

大家好,我是欧达克。

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

明文传输

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

前端单向哈希

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

加盐哈希

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

传输层加密+慢哈希算法

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

非对称加密

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

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

总结

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

相关推荐
小草cys6 分钟前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
奇舞精选8 分钟前
GELab-Zero 技术解析:当豆包联手中兴,开源界如何守住端侧 AI 的“最后防线”?
前端·aigc
奇舞精选10 分钟前
Vercel AI SDK:构建现代 Web AI 应用指南
前端·aigc
神仙别闹1 小时前
基于C语言实现B树存储的图书管理系统
c语言·前端·b树
玄魂1 小时前
如何查看、生成 github 开源项目star 图表
前端·开源·echarts
前端一小卒2 小时前
一个看似“送分”的需求为何翻车?——前端状态机实战指南
前端·javascript·面试
syt_10132 小时前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript
遝靑2 小时前
Flutter 跨端开发进阶:可复用自定义组件封装与多端适配实战(移动端 + Web + 桌面端)
前端·flutter
cypking2 小时前
Web前端移动端开发常见问题及解决方案(完整版)
前端
老前端的功夫2 小时前
Vue 3 vs Vue 2 深度解析:从架构革新到开发体验全面升级
前端·vue.js·架构