MD5加密算法

package com.util;  // 包名
/**
 *MD5密码加密类
 *
 */
import java.security.*;  // 引入java.security包下的所有类
import java.security.spec.*; 
public final class MD5 { // 命名类
 
 public final static String MD5(String s){ // 静态 final 方法
  char hexDigits[] = { 
  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 
  'e', 'f'};  // char类型数组,变量名为hexDigits
  try { 
   byte[] strTemp = s.getBytes();  // 把参数 s 转换成byte类型数组
   MessageDigest mdTemp = MessageDigest.getInstance("MD5");  // 得到一个MessageDigest 类型的变量mdTemp,提供

信息摘要算法的功能
   mdTemp.update(strTemp);  // 更新摘要
   byte[] md = mdTemp.digest();  // 这个方法应该是加密后返回的byte数组
   int j = md.length; // 记录md的长度
   char str[] = new char[j * 2];  // 存储结果用
   int k = 0; 
   for (int i = 0; i < j; i++) { 
    byte byte0 = md[i]; 
    str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // hexDigits 数组中对应的十六进制数放入str中
    str[k++] = hexDigits[byte0 & 0xf];  
   } 
   return new String(str); // 返回加密后的字符串
  } 
  catch (Exception e){ 
   return null;  // 如果有异常返回null
  } 
 }
}
1.hexDigits长度是16需要注意,这也是利用0xf的原因[十六进制]即[1111]二进制表示;
2.hexDigits[byte0 >>> 4 & 0xf] ,byte0无符右移4位,取与获得高四位(<=15),
同理hexDigits[byte0 & 0xf]获取低四位,这也是char str[] = new char[j * 2];的原因,
这两条语句其实是进行加噪音.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值