md5加密


package com.horizon.util;

import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
* 将字符串进行md5加密
* @author LIMENGCHENG292
*
*/
public class MD5 {
/**
*
* @param str 需要被加密的String
* @return 加密之后的String (32个16进制数 128位)
* 例如:A1234567890B1234567890C123456789
* @throws NoSuchAlgorithmException
*/
private static final String DEFAULTMD5String = "00000000000000000000000000000000";
public static String MD5Encoder(String str)
throws NoSuchAlgorithmException {
MessageDigest md5 = MessageDigest.getInstance("MD5");
if (str == null) {
// 如果需要加密的String是null,返回默认的DEFAULTMD5String
return DEFAULTMD5String;
}
md5.update(str.getBytes());
byte[] b = md5.digest();
int i = 0;
StringBuffer buf = new StringBuffer("");
for (int offset=0; offset<b.length; offset++) {
i = b[offset];
if (i<0) {
i = i + 256;
}
if (i<16) {
buf.append("0");
}
buf.append(Integer.toHexString(i));
}
return buf.toString();
}

public static String MD5Encoder(Object obj)
throws NoSuchAlgorithmException, IOException {
MessageDigest md5 = MessageDigest.getInstance("MD5");
if (obj == null) {
// 如果需要加密的Object是null,返回默认的DEFAULTMD5String
return DEFAULTMD5String;
}
md5.update(DataUtil.objToBytes(obj));
byte[] b = md5.digest();
int i = 0;
StringBuffer buf = new StringBuffer("");
for (int offset=0; offset<b.length; offset++) {
i = b[offset];
if (i<0) {
i = i + 256;
}
if (i<16) {
buf.append("0");
}
buf.append(Integer.toHexString(i));
}
return buf.toString();
}
}


第二个方法中的参数obj,必须是可序列化的,否则会throw一个NotSerializableException
上类中用到的DataUtil类,代码如下

package com.horizon.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class DataUtil {

public static byte[] objToBytes(Object obj) throws IOException {
if (obj == null) {
return null;
}
ByteArrayOutputStream bo = null;
ObjectOutputStream oo = null;
try {
bo = new ByteArrayOutputStream();
oo = new ObjectOutputStream(bo);
oo.writeObject(obj);
oo.flush();
oo.close();
return bo.toByteArray();
} catch (IOException e) {
throw e;
} finally {
if (bo != null) {
bo.close();
bo = null;
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值