MD5: 全称为message digest algorithm 5(信息摘要算法), 可以进行加密, 但是不能解密, 属于单向加密, 通常用于文件校验
Base64: 把任意序列的8位字节描述为一种不易为人识别的形式, 通常用于邮件、http加密. 登陆的用户名和密码字段通过它加密, 可以进行加密和解密.
package com.myteacher;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;import java.util.Base64;
public class EncrptBase64MD5 {/**
*
* @param 要加密密码参数 password
* @param 设置秘钥secret
* @return最终返回值固定长度加密值
*/
public static String enctptEncode(String password, String secret) {
//利用jdk1.8的base64第一次编码,加密密码password
String pwd = Base64.getEncoder().encodeToString(password.getBytes());
//利用jdk1.8的base64第一次编码,加密秘钥secret
String key = Base64.getEncoder().encodeToString(secret.getBytes());
MessageDigest md;
String result=null;
try {
//创建一个提供信息摘要算法的对象,初始化为"MD5"算法对象,或初始化为"SHA"也可以
md = MessageDigest.getInstance("MD5");
//md = MessageDigest.getInstance("SHA");
//通过调用digest()对base64单向编码后的密码和秘钥执行哈希计算,获得密文byte[] msg=md.digest(pwd.concat(key).getBytes());
//利用jdk1.8的base64单向编码再次加密密文,获得最终密码
result = Base64.getEncoder().encodeToString(msg);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
System.out.println(EncrptBase64MD5.enctptEncode("dengkaiyao", "aligator"));
System.out.println(EncrptBase64MD5.enctptEncode("我的老师APP", "133^_^5760"));
}
}
输出结果(长度恒定24位):
wa0xH/4IHXKI2Y9khbYYww==
UF4kXsmMtOia9N/VQuDWQ==