MD5加密时前边不显示0

1.按照下面的写法,当初始位为0时会舍弃

public static String md5(String str){
  MessageDigest md;
  try {
    md = MessageDigest.getInstance("MD5");
  } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    return null;
  }
  // 计算md5函数
  md.update(str.getBytes());
  //digest()最后确定返回md5 hash值,返回值为8为字符串。
  //因为md5hash值是16位的hex值,实际上就是8位的字符
  //BigInteger函数则将8位的字符串转换成16位hex值,
  //用字符串来表示;得到字符串形式的hash值
  return new BigInteger(1, md.digest())
                .toString(16).toUpperCase();
}

原因:字节转换成字符串的时候要保证是2位宽度啊,某个字节为0转换成字符串的时候必须是00的,否则就会丢失位数

2.较好写法

public static String md5(String str){
  MessageDigest md5 = null;  
  try{  
     md5 = MessageDigest.getInstance("MD5");  
  }catch (Exception e){  
    System.out.println(e.toString());  
    e.printStackTrace();  
    return "";  
  }  
  char[] charArray = str.toCharArray();  
  byte[] byteArray = new byte[charArray.length];
  for (int i = 0; i < charArray.length; i++)  
    byteArray[i] = (byte) charArray[i];  
  byte[] md5Bytes = md5.digest(byteArray);  
  StringBuffer hexValue = new StringBuffer();  
  for (int i = 0; i < md5Bytes.length; i++){  
    int val = ((int) md5Bytes[i]) & 0xff;  
    if (val < 16)  
      hexValue.append("0");  
    hexValue.append(Integer.toHexString(val));  
  }  
  return hexValue.toString().toUpperCase();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值