MD5加密工具类

package util;


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class MD5Tool { 

//该方法将你输入的字符串,通过md5加密,返回一个加密后的字符串 
public static String MD5Encrypt16(String inStr) { 
MessageDigest md = null; 
String outStr = null; 
try { 
md = MessageDigest.getInstance("MD5"); //可以选中其他的算法如SHA 
byte[] digest = md.digest(inStr.getBytes()); 
//返回的是byet[],要转化为String存储比较方便 
outStr = bytetoString(digest); 
} 
catch (NoSuchAlgorithmException nsae) { 
nsae.printStackTrace(); 
} 
return outStr; 
} 


public static String bytetoString(byte[] digest) { 


String str = ""; 
String tempStr = ""; 
for (int i = 1; i < digest.length; i++) { 
tempStr = (Integer.toHexString(digest[i] & 0xff)); 
if (tempStr.length() == 1) { 
str = str + "0" + tempStr; 
} 
else { 
str = str + tempStr; 
} 
} 
return str.toLowerCase(); 


} 

//32位加密
public static String MD5Encrypt(String values){
StringBuffer buf = new StringBuffer("");
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(values.getBytes());
byte b[] = md.digest();


int i; 
for (int offset = 0; offset <b.length; offset++) {
i = b[offset];
if(i<0) i+= 256;
if(i<16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return buf.toString();
}

//随机生成5位随机数 
public final static String get5Radom(){ 
String newString=null; 

//得到0.0到1.0之间的数字,并扩大100000倍 
double doubleP=Math.random()*100000; 

//如果数据等于100000,则减少1 
if(doubleP>=100000){ 
doubleP=99999; 
} 

//然后把这个数字转化为不包含小数点的整数 
int tempString=(int)Math.ceil(doubleP); 

//转化为字符串 
newString=""+tempString; 

//把得到的数增加为固定长度,为5位 
while(newString.length()<5){ 
newString="0"+newString; 
} 

return newString; 
} 

//主要把传递过来的字符串参数转化为经过MD5算法加密的字符串 
public final static String encrypeString(String neededEncrypedString) throws Exception{ 
//初始化加密之后的字符串 
String encrypeString=null; 

//16进制的数组 
char[] hexDigits={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 

//字符串的加密过程 
try { 
//把需要加密的字符串转化为字节数组 
byte[] neededEncrypedByteTemp=neededEncrypedString.getBytes(); 

//得到MD5的加密算法对象 
MessageDigest md = MessageDigest.getInstance("MD5"); 

//更新算法使用的摘要 
md.update(neededEncrypedByteTemp); 

//完成算法加密过程 
byte[] middleResult = md.digest(); 

//把加密后的字节数组转化为字符串 
int length = middleResult.length; 
char[] neededEncrypedByte = new char[length * 2]; 
int k = 0; 
for (int i = 0; i < length; i++) { 
byte byte0 = middleResult[i]; 
neededEncrypedByte[k++] = hexDigits[byte0 >>> 4 & 0xf]; 
neededEncrypedByte[k++] = hexDigits[byte0 & 0xf]; 
} 
encrypeString = new String(neededEncrypedByte); 
} catch (NoSuchAlgorithmException ex) { 
throw new Exception(ex); 
} 

//返回加密之后的字符串 
return encrypeString; 
}

public final static String getMD5String() {
String md5 = "";
try {
md5 = encrypeString(get5Radom());
} catch (Exception e) {
e.printStackTrace();
}
return md5;
}

//固定密钥加密
public static String HexEncode(String str) { 
String hexString = null; 
if (str != null && str.length() > 0) { 
char[] digital = "0123456789ABCDEF".toCharArray(); 
StringBuffer sb = new StringBuffer(""); 
try { 
byte[] bs = str.getBytes("utf-8"); 
int bit; 
for (int i = 0; i < bs.length; i++) { 
bit = (bs[i] & 0x0f0) >> 4; 
sb.append(digital[bit]); 
bit = bs[i] & 0x0f; 
sb.append(digital[bit]); 
} 
} catch(Exception e) { 
} 
hexString = sb.toString(); 
} 

return hexString; 
} 

//固定密钥解密
public static String HexDecode(String hexString) { 
String str = null; 
if (hexString != null && hexString.length() > 0) { 
String digital = "0123456789ABCDEF"; 
char[] hex2char = hexString.toCharArray(); 
byte[] bytes = new byte[hexString.length() / 2]; 
int temp; 
for (int i = 0; i < bytes.length; i++) { 
temp = digital.indexOf(hex2char[2 * i]) * 16; 
temp += digital.indexOf(hex2char[2 * i + 1]); 
bytes[i] = (byte)(temp & 0xff); 
} 
try { 
str = new String(bytes, "utf-8"); 
} catch (Exception e) { 
} 
} 
return str; 
} 

public static void main(String []args){ 
String test="safeMgrDev"; 


//创建一个MD5Tool类 
MD5Tool myMd5 =new MD5Tool(); 
String result=myMd5.MD5Encrypt(test); 
System.out.println (test+" 加密后的结果是:"+result); 

String s1 = HexEncode("safeMgrDev");
String s2 = HexDecode(s1);
System.out.println (s1 + "/" + s2); 
} 
} 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值