前端(Vue)sha512加密、后端(Java)sha512加密后加盐实现完整流程

搜索时发现sha512加密(加盐)的内容很少 所以过来添一块砖


写在前面

简单唠一会,别烦嗷!

遇见新的事物我们不妨先来认识一下它。它是什么,能做什么,如何实现,学习起来才能事半功倍。


一、理解一下SHA512加盐

是什么?sha512是密码加密的一种方式,加盐是为了多一层安全保障。密码加盐通俗点来讲就是在密码后面随机加上一个值(这个值随心所欲,可以是固定值、随机数、uuid……)。这个值就是盐(salt),加值的过程就叫加盐。能干什么?加密也好加盐也罢都是为了安全如何实现?org.apache.commons.codec.digest.DigestUtils这个类里集成了多种加密方法其中也包含了本文的主角——sha512,在自己的项目中封装成工具类简直不要太好用!

二、前端项目实现SHA512加密

实现功能前梳理一下自己的实现思路,个人觉得是极好的!!!

前端对明文密码加密的过程是比较简单的

实现步骤:

  1. 前端页面中引入js工具类
  2. 使用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. 创建工具类
  2. 项目中调用加密方法
  3. 加密数据入库,完毕。

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加密实现流程并不繁琐,相信大家也都有自己独一无二的实现方法,多加参考也不是什么坏事。


写在结尾

感谢阅读,喜欢把自己在项目中实现功能的过程分享出来,希望对大家有些许的帮助,人非圣人,如果有不正确的地方,还烦请指正。大家平时有什么好的学习方法也可以评论区分享给我,阿里嘎多!

在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值