up:: Spring Boot电商项目用户模块注册接口开发之全局统一处理异常

说明:

(1) 以前遇到过的使用MD5来保护密码的地方有:

● 第一次遇到是在:【封装Md5Utils加密工具类】;

●【完成会员注册功能】中也遇到了;

● 只是,上面的两个地方,我们都是使用的Apache组件包【Commons Codec】来实现MD5的;而本篇博客有点不同,没有使用Apache组件包【Commons Codec】;而是使用的Java自己提供的工具:java.security下的MessageDigest,来实现MD5的使用;

(2) 本篇博客需要注意的点:

● PS:现在在很多实际项目中,大家都不用MD5来实现加密了;

● 其实MD5是一种哈希算法,其会利用哈希的方式,把一个一种字符串转化为另一种难以辨认的字符串;同时,这个过程是无法反推的,所以MD5不具备解密的能力;所以,MD5只是一种哈希算法,其并不是一种严格意义上的加密算法;

● 这儿我们创建了Constant类,专门用来存放程序中可能用到的常量;而盐值就存放在了Constant类中;


1.为什么需要对密码进行加密;(以前说过好多次,这儿爱看不看)

所以,我们应该对密码进行加密处理;这样以后,即使数据库被攻破,黑客获取的也是加了密的密码,使用这个加密的密码,是登不进系统的;

2.创建MD5Utils工具类,完成【MD5实现加密效果的逻辑】;

MD5Utils类:

 
     package com.imooc.mall.utils;
 
     import com.imooc.mall.common.Constant;
     import org.apache.tomcat.util.codec.binary.Base64;
 
     import java.security.MessageDigest;
     import java.security.NoSuchAlgorithmException;
 
     /**
      * 描述:通过MD5来实现加密效果;
      */
     public class MD5Utils {
 
         public static String getMD5String(String strValue) throws NoSuchAlgorithmException {
             MessageDigest md5 = MessageDigest.getInstance("MD5");
             return Base64.encodeBase64String(md5.digest((strValue +  Constant.SALT).getBytes()));
         }
 
         //及时的测试
         public static void main(String[] args) {
             String md5 = null;
             try {
                 md5 = getMD5String("12345");
             } catch (NoSuchAlgorithmException e) {
                 e.printStackTrace();
             }
             System.out.println(md5);
 
         }
     }
 

说明:

(1) 因为这是个工具类,所以方法定义成static静态的,方便被调用;

(2) Java中给我们准备了很多工具;比如,这儿我们就使用了java.security中的MessageDigest,来实现MD5的使用;

(3) MessageDigest的使用;

(4) 我们得到的MD5字符串,进行Base64转码,以便存储;至于这儿为什么要进行Base64转码,为此,我们在【补充Base64转码】中,对其做了一个比较详细的介绍;

然后,需要注意,这儿我们使用的是Tomcat中的Base64;

(5) 单纯使用MD5去实现解密效果是不够的,还需要要加盐;比如这个【https://www.cmd5.com/】破解网站;

加盐:在原始字符串的基础上,随机的添加一些特别难以破解的值;盐值,不能写的过于简单,要写复杂点,否则还是可能被破解的;

(6) 创建了Constant类,专门用来存放程序中可能用到的常量;而盐值就存放在了Constant类中;

3.在项目中,使用MD5,来加密密码;

启动程序,观察效果;

那么,至此,我们就完成了【注册】接口的开发;