码迷,mamicode.com
首页 > 编程语言 > 详细

Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同

时间:2015-01-01 14:46:33      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

开发中遇到md5加密不一致问题,排除了上下文编码,加密内容问题。

爬了各类资料,最终找到了原因。

/** 对字符串进行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;
    }

需要给加密内容进行指定编码格式获取,对比一下PHP的MD5,真是醉了。

简单的得出结论: PHP不根据上下文编码格式进行字符的加密。相比于JAVA的加密,是根据加密内容的编码格式进行加密的,需要指定当前上下文对应的编码格式才能获取到想要的加密结果。

 

原因示例:

此类错误通常是编码格式的问题 如果我们控制台输入的字符是 BGK格式的 而 web传入的是UTF-8 我们 toString()查看内容 表明上是看不出区别的 这就导致了相同字符串 加密后得到的结果不同 如下面的小例子

import static org.apache.commons.codec.digest.DigestUtils.md5Hex; 
String text = "error606@qq.com|工工工|!@$%&1000"; 
String r1 = md5Hex(text); // b08f601a7b6b440dfa3ed6eb353c2d24
String r2 = md5Hex(text.getBytes("UTF-8")); // b08f601a7b6b440dfa3ed6eb353c2d24 
String r3 = md5Hex(text.getBytes("GBK")); // db9e73be9742ed2a66202a62f491ef03 

PS: http://blog.csdn.net/w627782664/article/details/7064273

Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同

标签:

原文地址:http://www.cnblogs.com/phpdragon/p/4181712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!