JAVA 的MD5加密算法源代码

来源:互联网 发布:网络病毒 应急 演练 编辑:程序博客网 时间:2024/05/29 11:59

import java.security.MessageDigest;

public class RMD5 {
 
 public RMD5(){
 }
 
 public final static String MD5(String strOriginal){
  char[] cHexDigits = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; 
  byte[] cOriginal = strOriginal.getBytes();
  try{
   MessageDigest md5 = MessageDigest.getInstance("MD5");
   md5.update(cOriginal);
   byte[] bMd = md5.digest();
   char[] cProcessed = new char[bMd.length * 2];
   int k = 0;
   for(int i = 0;i < bMd.length; i++){
    byte bTmp = bMd[i];
    cProcessed[k++] = cHexDigits[bTmp >>> 4 & 0xf];
    cProcessed[k++] = cHexDigits[bTmp & 0xf];
   }
   return new String(cProcessed);
  }
  catch(Exception e){
   return null;
  }
 }
}

bTmp & 0Xf 的作用是将byte转化为int

因为0xf是整型,bTmp & 0xf 向大的数据类型靠拢,就是整型了。

java中的byte sign ,所以 将一个负byte强制转换成int,就会损坏原来的binary表示,例如:
byte bb=(byte) 0xf1; //11110001
printBinary((int)bb);//11111111111111111111111111110001

printBinary(bb & 0xff);//00000000000000000000000011110001

运行结果:

int: -15 binary:

 

 

 

11111111111111111111111111110001

int: 241 binary:

00000000000000000000000011110001

原创粉丝点击