本文主要是介绍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
这篇关于md5加密 控制台传入与web传入参数 md5加密结果不同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!