MD5加密的一种写法

package com.ezendai.credit2.common.util;

import java.security.MessageDigest;

/**
*
*@author: chengjun
*
*/
public class MD5Support {
private static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };

public final static String MD5(String s,String encoding) {

try {
//本来我要使用getBytes("UTF-8");但因为我也要在lua中使用md5,而lua中搞定utf8很麻烦,所以
//我在此并未使用utf-8,如果所有部署的机器都是同样编码(本系统是gbk)的话,不会出问题,但如果出现不同编码的机器
//明显会出问题
//同样的问题也出现在base64surpport
byte[] strTemp;
if(encoding!=null)
strTemp= s.getBytes(encoding);
else
strTemp= s.getBytes();
//byte[] strTemp = s.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
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];
//直接截掉高四位
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
}

MD5加密:
String.getBytes();

MessageDigest 类 :



对进行加密之后的MD5字符串进行再次处理,处理方式如下,讲MD5加密后的字符串md,每一位,进行两次变化,大致说就是讲每一位转换成16进制。一位变两位。免得容易被破解

btye0 >>> 4 & 0xf 首先执行位移操作,保留低四位,0xf 转换成二进制就是 1111
& 0xf & 按位求与,只有同时为1才为1,其他都为0
>>>右移运算符,无论正负高位补零, >>右移运算符,正数高位补0,负数高位补1

结束: 核心点,MD5加密过后对密文进行二次处理,每一位按照不同的运算方式转换成16进制位,这样MD5加密后的密文长度扩大一倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值