
java md5加密踩坑记录:特殊转义字符问题
在进行md5加密时,可能会遇到特殊字符转义的问题,导致加密结果与预期不一致。最近,我们在使用php和java对字符串进行md5加密时就遇到了这样的问题。
php中的代码如下:
$pwd=123456;echo md5($pwd."\xa3");
这段代码使用”xa3″对字符串进行了转义,结果为e885a841c486e07e91290546698f748c。
立即学习“PHP免费学习笔记(深入)”;
而在java中,相同的字符串使用”xa3″转义后,md5加密结果却不同:
阿里云-虚拟数字人
阿里云-虚拟数字人是什么? …
2 查看详情
int str="123456";return getmd5(str+"\xa3");
加密结果为3245fdd037dda90671a058373e238244。
经过查证发现,php中的”xa3″会被转义为”u00a3″(unicode码)。而java中直接使用”xa3″,导致它仅被当作一个普通的字符进行加密,而非转义字符。
解决方法是将java中的转义字符正确转换为unicode码。可以参考以下代码:
String pwd = "123456";String salt = "u00a3"; // 就是�的unicode码String str = pwd + salt;byte[] bytes = str.getBytes("ISO-8859-1"); //把所有的字节都当成PHP默认的ISO-8859-1字符来处理MessageDigest md = MessageDigest.getInstance("MD5");byte[] digest = md.digest(bytes);String md5Hex = String.format("%02x", new java.math.BigInteger(1, digest));System.out.println(md5Hex);
经过如此修正后,java中的md5加密结果与php中的结果一致,问题得到解决。
以上就是JAVA和PHP对特殊转义字符进行MD5加密,为什么结果不一致?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/451001.html
微信扫一扫
支付宝扫一扫