自定义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

你可能感兴趣的:(错误,leetcode,算法,职场和发展,java)