网站首页 > 博客文章 正文
概述
本文介绍一种常用的密码加密存储方式,并附上登录时验证用户密码的方法。代码用 Java 来实现,结尾附带有 github 的源码链接。
创建账号
用户注册账号,填写好密码后传递到后端。密码的形式一般是经过前端 md5 加密过的。
账号实体类
public class Account {
/**
* 其他账号的字段省略
*/
private String salt;
private String hashedCredential;
// 省略getter setter方法
}
密码处理逻辑
/**
* 创建账号
* @param principle 用户账号
* @param frontendPassword 用户密码,用户在前端输入的密码以 md5 的形式传到后端
*/
public void createAccount(String principle, String frontendPassword) {
Account account = md5WithSalt(frontendPassword);
// 保存账号,模拟数据库保存
DB_ACCOUNTS.put(principle, account);
}
// ~ private
private Account md5WithSalt(String frontendPassword) {
Account account = new Account();
// 随机字符串做盐
account.setSalt(UUID.randomUUID().toString());
// 盐和密码结合取hash值
account.setHashedCredential(SecurityUtil.md5Hex(account.getSalt() + frontendPassword));
return account;
}
登录校验
根据账号来获取它的盐并且和登录时输入的密码求hash,此 hash 值和数据库存取的 hash 值相等则密码校验通过。
/**
* 登录逻辑
* @param principle 用户账号
* @param frontendPassword 用户密码,用户在前端输入的密码以 md5 的形式传到后端
* @return true-登录成功,false-登录失败
*/
public Boolean login(String principle, String frontendPassword) {
Account account = DB_ACCOUNTS.get(principle);
if (account == null) {
return false;
}
return account.getHashedCredential()
.equals(SecurityUtil.md5Hex(account.getSalt() + frontendPassword));
}
示例源码
LoginDemo.java
猜你喜欢
- 2025-07-28 告别频繁登录!Nuxt3 + TS + Vue3实战:双Token无感刷新方案全解析
- 2025-07-28 SpringBoot实现单点登录(SSO)的4种方案
- 2025-07-28 随机密聊 匿名聊天室程序源码(随机匿名聊天在线)
- 2025-07-28 SpringBoot大文件上传卡死?分块切割术搞定GB级传输,速度飙升!
- 2025-07-28 Java 微服务从源码实战开始 | Gitee 项目推荐
- 2025-07-28 轻量级埋点sdk搭建,便捷更全面(埋点sdk是什么)
- 2025-07-28 Spring Boot 实现文件秒传功能(springboot上传文件到指定文件夹)
- 2025-07-28 项目中不用redis分布式锁,怎么防止用户重复提交?
- 2025-07-28 SpringBoot项目日志打印traceId生成
- 2025-07-28 如何实现PC端网站扫码登录操作?(网页 扫码)
你 发表评论:
欢迎- 08-06nginx 反向代理
- 08-06跨表插入连续的日期,sheetsname函数#excel技巧
- 08-06初中生也能学的编程,不走弯路,先用后学
- 08-06find命令的“七种武器”:远不止-name和-type
- 08-06恶意代码常见的编程方式
- 08-06kali2021ping 外网不通
- 08-06因为一个函数strtok踩坑,我被老工程师无情嘲笑了
- 08-06hadoop集群搭建详细方法
- 23℃nginx 反向代理
- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- #NAME? (61)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)