使用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); }