自定义MD5加密工具类,报错ArrayIndexOutOfBoundsException: 15
这个报错是因为我的char[] hexArray数组只有15个元素,加1个到16个就好了
public class MD5Util {
/**
* 加密
* @param origin
* @return
* @date 2021-12-27 16:24:50
*/
public static String getMd5(String origin){
//自定义数组,相当于盐
char[] hexArray={
'5','2','2','1','2',
'9','a','b','3','e',
'f','7','c','4','6'
};
try {
//把origin转换为为数组
byte[] originBytes = origin.getBytes();
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(originBytes);
//加密后的数组
byte[] digest = md5.digest();
//定义返回加盐后的数组,*2是要确定能够放得下
char[] str=new char[digest.length*2];
int k =0;
//对加密后的数组加盐
//首先判断加密后的数组长度,遍历数组,对每个元素进行以为运算
for (int i = 0; i < digest.length; i++) {
byte b = digest[i];
str[k++]=hexArray[b>>>4&0xf];//对b进行移位运算,0xf表示16进制的15
str[k++]=hexArray[b&0xf];
}
return new String(str);
}catch (Exception e){
e.printStackTrace();//打印堆栈信息
return "123456";
}
}
把 char[] hexArray修改3为16个元素后
char[] hexArray={
'5','2','2','1','2',
'9','a','b','3','e',
'f','7','c','4','6','8'
};
System.out.println(getMd5("123456"));
//控制台打印结果: 625f4c1e2e7f9ef7769a659b82583316