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
本文介绍了一种使用Java实现的MD5加密算法,并详细解释了如何将输入字符串转换为MD5哈希值的过程。特别关注了如何通过按位与操作处理byte类型的数值,确保转换过程正确无误。

1091

被折叠的 条评论
为什么被折叠?



