md5加密 控制台传入与web传入参数 md5加密结果不同

问题描述:相同的字符串,通过main方法调用md5加密的结果,与web api参数接收后,md5加密,结果却不同。

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

public class MD5Digest {
	private static MessageDigest md5=null;
	public static String getDigest(String msg) throws UnsupportedEncodingException, NoSuchAlgorithmException {
		if(null == md5) {
			md5=MessageDigest.getInstance("MD5");
		}
		byte[] byteArray=null;
		byteArray=msg.getBytes(); 
		byte[] md5Bytes=md5.digest(byteArray);
		StringBuffer hexValue=new StringBuffer();
		for(int i=0; i < md5Bytes.length; i++) {
			int val=((int)md5Bytes[i]) & 0xff;
			if(val < 16)
				hexValue.append("0");
			hexValue.append(Integer.toHexString(val));
		}
		return hexValue.toString();
    }
}

查看MD5的代码实现(如上),会发现

byteArray=msg.getBytes();

该行代码在不同的环境下获得的结果可能不同,这样也造成MD5结果不一样的原因。

要保证在不同环境下MD5结果相同,则必须使用相同的字符编码,比如:

byteArray=msg.getBytes("UTF-8"); 

/** 对字符串进行MD5加密 */
private static String encodeByMD5(String originString) {
	if (originString != null) {
		try {
			// 创建具有指定算法名称的信息摘要
			MessageDigest md = MessageDigest.getInstance("MD5");
			// 使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
			byte[] results = md.digest(originString.getBytes("UTF-8"));
			// 将得到的字节数组变成字符串返回
			String resultString = byteArrayToHexString(results);
			return resultString.toUpperCase();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
	return null;
}


该问题可以通过如下代码演示:

import static org.apache.commons.codec.digest.DigestUtils.md5Hex;

String text = "error606@qq.com|工工工|!@$%&1000";

String r1 = DigestUtils.md5Hex(text);

System.out.println(r1); //b08f601a7b6b440dfa3ed6eb353c2d24

String r2 = DigestUtils.md5Hex(text.getBytes("UTF-8"));

System.out.println(r2); //b08f601a7b6b440dfa3ed6eb353c2d24

String r3 = DigestUtils.md5Hex(text.getBytes("GBK"));

System.out.println(r3); //db9e73be9742ed2a66202a62f491ef03

String r4 = DigestUtils.md5Hex(text.getBytes("ISO-8859-1"));

System.out.println(r4); //cd64703ba680391d452765d564d7e13e


转载:http://www.cnblogs.com/phpdragon/p/4181712.html


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值