首页 > 代码库 > Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同
Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同
开发中遇到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); // b08f601a7b6b440dfa3ed6eb353c2d24String 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传入参数 结果不匹配 || 相同字符串加密结果不同
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。