前端(Vue)sha512加密、后端(Java)sha512加密后加盐实现完整流程
搜索时发现sha512加密(加盐)的内容很少 所以过来添一块砖
文章目录
写在前面
简单唠一会,别烦嗷!
遇见新的事物我们不妨先来认识一下它。它是什么,能做什么,如何实现,学习起来才能事半功倍。
一、理解一下SHA512加盐
是什么?
sha512是密码加密的一种方式,加盐是为了多一层安全保障。密码加盐通俗点来讲就是在密码后面随机加上一个值(这个值随心所欲,可以是固定值、随机数、uuid……)。这个值就是盐(salt),加值的过程就叫加盐。能干什么?
加密也好加盐也罢都是为了安全。如何实现?
org.apache.commons.codec.digest.DigestUtils这个类里集成了多种加密方法其中也包含了本文的主角——sha512,在自己的项目中封装成工具类简直不要太好用!
二、前端项目实现SHA512加密
实现功能前梳理一下自己的实现思路,个人觉得是极好的!!!
前端对明文密码加密的过程是比较简单的
实现步骤:
- 前端页面中引入js工具类
- 使用CryptoJS.SHA512() 方法进行加密
1.前端页面中引入js工具类
//npm安装环境
npm install crypto-js
Tips:这里既可以终端手动输入命令,也可以鼠标悬浮自动导入的哈
//在需要使用加密方法的页面中引入CryptoJS
import CryptoJS from "crypto-js"
2.调用CryptoJS.SHA512()方法进行加密
const Sha512Password = CryptoJS.SHA512(this.password)
这样传给服务端的密码就是sha512加密过的密文啦,具体如何使用还要结合自己的实际项目。
三、后端项目实现SHA512加密加盐
实现步骤:
- 创建工具类
- 项目中调用加密方法
- 加密数据入库,完毕。
1.创建加密工具类SHA512Utils.java
代码如下(示例):
项目中util包SHA512Utils.java文件下 Tips:
代码中有注释可以参考辅读
package com.pay.util;
import org.apache.commons.codec.digest.DigestUtils;
import java.util.UUID;
public class SHA512Utils {
//SHA512加密
//创建SHA512对象
public static String SHA512(String code) {
byte[] sha512Bytes = DigestUtils.sha512(code);
//加密后的数据类型为byte[],这里将它转化为字符串类型
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < sha512Bytes.length; i++) {
String hex = Integer.toHexString(0xff & sha512Bytes[i]);
if (hex.length() == 1) {
stringBuffer.append('0');
}
stringBuffer.append(hex);
}
//返回值字母转下大写
return stringBuffer.toString().toUpperCase();
}
//进行密码校验 userPwd用户输入的密码 dbPwd数据库中的密码 salt数据库中的盐
public static boolean checkPassword(String userPass, String dbPass, String salt) {
if (dbPass.equals(SHA512(userPass+salt))) {
return true;
} else {
return false;
}
}
//我这里用随机uuid来作为盐值,看个人的选择了
//获得UUID
public static String getUUID() {
return UUID.randomUUID().toString().replace("-", "");
}
//调用获取uuid的方法来获得盐值
public static String getSalt() {
return SHA512Utils.getUUID();
}
}
2.调用工具类方法
代码如下(示例):
package com.pay.web.controller;
import com.pay.util.SHA512Utils;//引用工具类
//示例为我在项目中的使用,具体实现逻辑结合你们自己的项目
SHA512Utils.SHA512(request.getNewPassword()+salt).equals(password);
我在项目中实现的逻辑思路是:把用户输入的密码userPass在前端进行sha512加密后加上盐值salt再次进行sha512加密,把得到的结果与数据库中保存的密文进行比对,虽不是最简,确胜在逻辑缜密。
3.数据入库
代码如下(示例):
//将盐值存入对象
business.setSalt(SHA512Utils.getSalt());
//将加密后的数据存入对象
business.setPassword(SHA512Utils.SHA512(request.getNewPassword()+business.getSalt()));
//以类对象的形式将整条数据存在库中
service.update(business);
sha512加密实现流程并不繁琐,相信大家也都有自己独一无二的实现方法,多加参考也不是什么坏事。
写在结尾
感谢阅读,喜欢把自己在项目中实现功能的过程分享出来,希望对大家有些许的帮助,人非圣人,如果有不正确的地方,还烦请指正。大家平时有什么好的学习方法也可以评论区分享给我,阿里嘎多!