MD5 加盐加密
一、概述
MD5(Message Digest Algorithm 5),是一种散列算法,是不可逆的,即通过md5加密之后没办法得到原文,没有解密算法。
在一般的项目中都会有登录注册功能,最简单的,登录注册过程完全没有加密,存储在数据库的密码也是明文,安全性是很差的,万一数据泄露就不好了(表一)。所以,通过MD5将密码加密后保存在数据库中(表二),在登录的过程中后端将从前端获取到的密码加密,对照数据库中已经加密的密码。
但是一般加密算法固定,很容易破解,安全系数低,就我所知,有很多网站可以直接破解密文。为了提高安全性,可以采取加盐的方式。生成一组随机串,保存在数据库中,然后混杂在原来的密码中,再通过加密算法加密,存进数据库中(表三)。

表一

表二

表三
至于MD5加密算法的底层原理,参考这篇博客:https://blog.csdn.net/sinat_27933301/article/details/79538169
二、代码实现
Java有挺多关于MD5加密的方法,这里就用Spring中的 DigestUtils.md5DigestAsHex() 实现。
public class MD5Util {
public String passwordEncryptor(String password){
return DigestUtils.md5DigestAsHex(password.getBytes());
}
}
从前端获取用户输入的用户名,查找数据库中的 salt,并混在用户输入的密码中,这里我直接把 salt 加在后面
// 省略很多代码,包括查找数据库的代码
String username = request.getParameter("username");
String password = request.getParameter("password");
String salt = impUserService.findSalt(username);
String mdPassword = md5Util.passwordEncryptor(password + salt);
User user = impUserService.find(username, mdPassword);
三、其他的问题
用户登录时的密码需要在前端用js加密后再提交吗?
我个人想法,应该是不用的。可能觉得前端明文传输给后端的话,过程中如果能被人截取到,那不是挺危险的。但是既然能获取,那前端的加密算法也暴露了,所以感觉像是做无用功。当然这只是我个人想法,有知道的或者有其他想法的大佬跟我说一下哈哈哈。
MD5 加盐加密的更多相关文章
- md5加密,md5加盐加密和解密
package com.java.test; import java.security.MessageDigest; import java.security.SecureRandom; import ...
- 一种简单的md5加盐加密的方法(防止彩虹表撞库)
md5加密(或者说摘要算法)大家都很熟悉了 就不解释了 现在很多数据库设计都喜欢用单向加密的方式保存密码,验证时对提交的密码再次加密之后做密文对比 /// <summary> 使用MD5加 ...
- MD5加盐加密
package com.chauvet.utils; import java.security.NoSuchAlgorithmException; import java.util.Random; / ...
- Java使用MD5加盐进行加密
Java使用MD5加盐进行加密 我使用的方法是导入了md5.jar包,就不需要再自己写MD5的加密算法了,直接调用方法即可 点击下载md5包 import com.ndktools.javamd ...
- Shiro加盐加密
接本人的上篇文章<Shiro认证.角色.权限>,这篇文章我们来学习shiro的加盐加密实现 自定义Realm: package com.czhappy.realm; import org. ...
- 加盐加密salt
加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联. 加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“( ...
- 关于MD5+salt盐加密
MD5+salt 最近浏览浏览一些帖子时,发现曾经引以为傲的md5加密算法,虽然是无法解密的算法,但是现在可以通过FELHELP(谷歌浏览器插件)或者一些字典可以套出来,.但是当md5+salt值时, ...
- 【koa2】用户注册、登录校验与加盐加密
加密与解密 先介绍一下关于服务端用户名跟密码的存储状态,我们知道当前端在注册一个新用户时,会在表单内填入用户名和密码,并通过post请求提交到服务器,服务器再把用户名和密码从ctx.request.b ...
- MD5 加密 以及 加盐加密
这是MD5加密 - (NSString *)MD5Hash { const char *cStr = [self UTF8String]; unsigned char result[16]; CC_M ...
随机推荐
- Ubuntu分区方案
swap: 4G(跟你自己内存一样大):主分区:空间起始位置:用于交换空间 /boot: 300M(太小会导致软件无法升级):逻辑分区:空间起始位置:EXT4:/boot /: 30G:主分区:空间起 ...
- SystemMetrics
头文件: #define NUMLINES ((int) (sizeof sysmetrics / sizeof sysmetrics [0]))struct { int iIndex ; TCHAR ...
- Bzoj 4806 炮 (dp)
题目描述 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘 ...
- Go语言系列开发之延迟调用和作用域
Hello,各位小伙伴大家好,我是小栈君,最近一段时间我们将继续分享关于go语言基础系列,当然后期小栈君已经在筹划关于java.Python,数据分析.人工智能和大数据等相关系列文章.希望能和大家一起 ...
- html、css、javascript之间的关系
网页主要由三部分组成: 结构( Structure) . 表现( Presentation) 和行为( Behavior)HTML —— 结构, 决定网页的结构和内容( “是什么”)CSS —— 表现 ...
- idea的tomcat实现热部署遇到的问题
选择Deployment的时候,要选择exploded结尾的,否则不支持热部署
- 使用 Hexo,Material Theme 以及 Github Pages 搭建个人博客
准备条件 Node.js npm Git GitHub账号 开始搭建 hexo init Blog cd Blog npm install hexo-deployer-git --save npm i ...
- .NET Core3.0 日志 logging
多年的经验,日志记录是软件开发的重要组成部分.没有日志记录机制的系统不是完善的系统.在开发阶段可以通过debug附件进程进行交互调试,可以检测到一些问题,但是在上线之后,日志的记录起到至关重要的作用. ...
- C++沉思录笔记 —— 序幕
#include <stdio.h> class Trace{public: void print(const char* s) { printf("%s\n", ...
- 基于redis解决session分布式一致性问题
1.session是什么 当用户在前端发起请求时,服务器会为当前用户建立一个session,服务器将sessionId回写给客户端,只要用户浏览器不关闭,再次请求服务器时,将sessionId传给服务 ...