您的位置:首页 > 其它

插入数据时密码使用MD5加密算法加密

2015-07-31 16:32 531 查看
package com.cmcc.vrp.util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.SignatureException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.DigestUtils;

public class MD5 {

/**
* 16进制字符集,用于将MD5算法处理后二进制字节流转换为16进制字符串
*/
public static final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

private static final Log logger = LogFactory.getLog(MD5.class);

/**
* 签名字符串
*
* @param text
*            需要签名的字符串
* @param key
*            密钥
* @param input_charset
*            编码格式
* @return 签名结果
*/
public static String sign(String text, String key, String input_charset) {
text = text + key;
return DigestUtils.md5DigestAsHex(getContentBytes(text, input_charset));
}

/**
* 签名字符串
*
* @param text
*            需要签名的字符串
* @param sign
*            签名结果
* @param key
*            密钥
* @param input_charset
*            编码格式
* @return 签名结果
*/
public static boolean verify(String text, String sign, String key,
String input_charset) {
text = text + key;
String mysign = DigestUtils.md5DigestAsHex(getContentBytes(text,
input_charset));
if (mysign.equals(sign)) {
return true;
} else {
return false;
}
}

/**
* @param content
* @param charset
* @return
* @throws SignatureException
* @throws UnsupportedEncodingException
*/
private static byte[] getContentBytes(String content, String charset) {
if (charset == null || "".equals(charset)) {
return content.getBytes();
}
try {
return content.getBytes(charset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:"
+ charset);
}
}

/**
* 将指定的字符串使用md5算法处理后返回16进制字符串。
* <p>
*
* @param text
* @return
*/
public static String md5(String text) {
byte[] bytes = text.getBytes();
return md5(bytes);
}

/**
* 将指定的字符串使用md5算法处理后返回16进制字符串。
* <p>
*
* @param bytes
* @return
*/
public static String md5(byte[] bytes) {
try {
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
md.update(bytes);
// 获得密文
byte[] encrypted = md.digest();

return toHex(encrypted);
} catch (Exception e) {
logger.equals(e);
return null;
}
}

/**
* 获取md5算法实例
* <p>
*
* @return
*/
public static MessageDigest getMD5Instance() {
try {
return MessageDigest.getInstance("MD5");
} catch (Exception e) {
logger.equals(e);
return null;
}
}

/**
* 将字节数组转化为16进制字符串
* <p>
*
* @param bytes
* @return
*/
public static String toHex(byte[] bytes) {
if (bytes == null) {
return null;
}

// 把密文转换成十六进制的字符串形式
int j = bytes.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = bytes[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
}


private boolean insertSelective(Administer administer) {
if (administer == null) {
return false;
}

String szPassword = administer.getPassword();
if (szPassword == null) {// 密码经过Md5加密后存入数据库
return false;
}
szPassword = MD5.sign(szPassword, "", "utf-8");
administer.setPassword(szPassword);

administer.setCreateTime(new Date());
administer.setUpdateTime(new Date());
administer.setDeleteFlag(Constants.DELETE_FLAG.UNDELETED.getValue());
return administerMapper.insertSelective(administer) > 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: