JAVA 的MD5加密算法源代码

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值