package com.security.md5;
import java.security.MessageDigest;
/**
* @author md5
*
*/
public class Md5 {
public static void main(String[] args) throws Exception {
System.out.println("简单md5加密____:"+md5Encode("123456"));
//避免不同的人有相同的密文不安全
System.out.println("带key映射的md5加密___:"+md5KeyEncode("zhangsan","123456"));
}
/**
* 简单加密
* @param generalStr 明文
* @return 密文
* @throws Exception
*/
public static String md5Encode(String generalStr) throws Exception {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(generalStr.getBytes());
// 根据明文的字节数组构造 加密后的字符串 可以增加位移算法 独立的key等
byte[] bytes = messageDigest.digest();
String md5Str = "";
for (int i = 0; i < bytes.length; i++) {
// System.out.println("每个字节数组数值:"+(char)bytes[i]);
// 判断每个字节的数值 小于0的会出现负数 不要
int temp = 0;
if (bytes[i] < 0) {
temp = 256 + bytes[i];
} else {
temp = bytes[i];
}
// 当位数不够补位
if (temp < 16) {
md5Str = md5Str + "0";
}
md5Str = md5Str + Integer.toString(temp, 16);
}
return md5Str;
}
/**
* 用户名映射
* @param userName 映射key
* @param userPwd 明文
* @return 密文
* @throws Exception
*/
public static String md5KeyEncode(String userName, String userPwd) throws Exception {
String code = userName + userPwd;
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(code.getBytes("UTF-8"));
byte[] bytes = messageDigest.digest();
String md5Str = "";
for (int i = 0; i < bytes.length; i++) {
int temp = 0;
// 当bytes<0
if (bytes[i] < 0) {
temp = 256 + bytes[i];
} else {
temp = bytes[i];
}
// 当位数不够16位时
if (temp < 16) {
md5Str = md5Str + "0";
}
md5Str = md5Str + Integer.toString(temp, 16);
}
return md5Str;
}
}
//运行结果
//网上对比结果