03 MD5加密、Base64处理
1 什么是MD5
信息摘要算法,可以将字符进行加密,每个加密对象在进行加密后都是等长的
应用场景:将用户密码经过MD5加密后再存储到数据库中,这样即使是超级管理员也没有能力知道用户的具体密码是多少;因为MD5加密后的数据时不能够被解密的
步骤:
》获取MessageDigest对象
MessageDigest md5 = MessageDigest.getInstance("MD5");
注意:import java.security.MessageDigest;
》通过MessageDigest对象的方法对字符数组进行加密
byte [] output = md5.digest(str.getBytes());
注意:digest方法的参数和返回值都是字符数组类型
》问题:通过加MD5加密后的数据时乱码,怎么让他变成不是乱码
》解决:通过Base64算法
2 什么是Base64
对字符串进行显示处理,即:用常见的64个字符来对字符进行显示,从而有效地避免了乱码问题
应用场景:防止乱码的产生
步骤:
》直接使用Base64类中的静态方法
str_output = Base64.encodeBase64String(output);
注意:encodeBase64String方法的参数是字符数组,返回值是字符串
注意:import org.apache.tomcat.util.codec.binary.Base64;
3 MD5 和 Base64 的综合应用
1 package cn.xiangxu.cloudNote.util; 2 3 import java.security.MessageDigest; 4 import java.security.NoSuchAlgorithmException; 5 6 import org.apache.tomcat.util.codec.binary.Base64; 7 8 /** 9 * 工具类:MD5加密算法 10 * @author Administrator 11 * 12 */ 13 public class NoteUtil { 14 /** 15 * MD5加密算法,实现将一个字符串进行MD5加密,然后用64个常见的字符进行显示 16 * @param src 待加密的字符串 17 * @return 返回一个字符串,这个字符串是加密后进过base64处理的结果 18 */ 19 public static String md5(String src) { 20 try { 21 // 创建MessageDigest对象 22 MessageDigest md = MessageDigest.getInstance("MD5"); 23 // 利用MessageDigest对象的方法对字符数组进行加密 24 byte [] output = md.digest(src.getBytes()); 25 // 将加密后的字符数组转换成字符串后输出 26 // return new String(output); 27 28 // 利用base64对加密数据进行处理(即:利用基本的64个字符来显示加密后的数据,并将其转化成字符串) 29 String ret = Base64.encodeBase64String(output); 30 return ret; 31 } catch (NoSuchAlgorithmException e) { 32 e.printStackTrace(); 33 throw new Md5Exception("加密失败", e); 34 } 35 // return src; // 对异常进行抛出后就不能够执行到这行代码了 【捕获到异常并抛出落后就不能执行到这一行啦】 36 } 37 }
1 package cn.xiangxu.cloudNote.util; 2 3 4 /** 5 * MD5加密算法运行异常类 6 * @author 三少 7 * 8 */ 9 public class Md5Exception extends RuntimeException { 10 11 private static final long serialVersionUID = 5316676928450756806L; 12 13 public Md5Exception(String message, Throwable cause) { 14 super(message, cause); 15 // TODO Auto-generated constructor stub 16 } 17 18 }
4 MD5 和 Base64 综合应用简例
1 package cn.xiangxu.testNote.test; 2 3 import java.security.MessageDigest; 4 5 import org.apache.tomcat.util.codec.binary.Base64; 6 7 public class Test { 8 public static String md5(String str) throws Exception { 9 try { 10 MessageDigest md5 = MessageDigest.getInstance("MD5"); 11 System.out.println("md5对象:" + md5); 12 System.out.println("原始数据:" + str); 13 14 byte [] output = md5.digest(str.getBytes()); 15 String str_output = new String(output); 16 System.out.println("加密后数据:" + str_output); 17 18 str_output = Base64.encodeBase64String(output); 19 System.out.println("处理后的加密数:" + str_output); 20 } catch (Exception e) { 21 e.printStackTrace(); 22 throw new Exception(e); 23 } 24 return null; 25 } 26 27 public static void main(String[] args) throws Exception { 28 Test.md5("dd"); 29 } 30 31 32 }