使用md5加密 登录、注册
摘要算法
摘要算法也称为哈希算法、散列列算法,可以将任意长度的数据转换成一个定长的、不可逆的数字。只要原
文本不不同,计算的结果必然不同(几乎不用考虑重复的情况)。摘要算法?用于对比信息源是否一致,因为
只要数据源发生变化,得到的摘要信息必然不同,通常用于签名校验。
消息摘要算法的特点:
- 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。
- 消息摘要不是真正的随机,因为用相同的算法对相同的消息求两次摘要,其结果必然相同
- 消息摘要函数是无陷?门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚?至根本就找不到任何与原信息相关的信息
常见的摘要算法有:MD5、SHA-1、MAC、CRC等;
sha1与md5的区别:https://www.cnblogs.com/scu-cjx/p/6878853.html
下载前端加密需要用到的js,http://pajhome.org.uk/crypt/md5/

测试
使用md5.js
<script type="text/javascript" src="js/md5-min.js"></script>
<script type="text/javascript">
var hex = hex_md5("admin");
console.log(hex);
</script>
使用md5前台加密加盐+后台加密加盐注册:
1、前端页面
$("#registerbtn").click(function () {
var username = $("#username").val();
//使用md5加密加盐
var salt = "hhj"
var password = hex_md5($("#rpassword2").val()+salt); //加密方法
$.post("/user/registered",
{ "username":username,
"password":password
}
, function (rs) {
console.log(rs);
}, "json");
});2、后台工具类
public class EncryptUtils {
//自定义盐值
public static final String SALT = "itheima";
//MD5加密
public static String md5s(String plainText) {
String str = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
str = buf.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return str;
}
}sha1 工具类:
public static String SHA1(String decript) {
try {
MessageDigest digest = MessageDigest
.getInstance("SHA-1");
digest.update(decript.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}3、后台service方法的编写
@Override
public boolean register(T_user user) throws Exception {
//使用md5进行二次加密加盐
user.setPassword(EncryptUtils.md5s(user.getPassword() + EncryptUtils.SALT));
return userMapper.insert(user) > 0 ? true : false;
}数据库中密码字段显示密文:

登录用户(输入密码再次加密判断是否与数据库中的一致)
1、前端页面(注意加密方法、盐值必须一致)
$("#loginbtn").click(function(){
//使用md5加密加盐
var salt="hhj";
var rpassword=hex_md5($("#rpassword").val()+salt);
。。。2、后台验证
@Override
public T_user login(T_user user) throws Exception {
//使用md5进行二次加密加盐
user.setPassword(EncryptUtils.md5s(user.getPassword() + EncryptUtils.SALT));
QueryWrapper<T_user> query = new QueryWrapper<>();
query.eq("password", password);
return userMapper.selectOne(query);
}