java的32位MD5加密与php中的32位MD5加密结果不一样。求帮助。急急急

时间:2022-10-28 16:52:30
java: System.out.println(mad.toMd5(mad.toMd5("4451711")+"09519f").toLowerCase());   
结果:0169d79a79c506c7289359b1104f69ad
php: echo md5(md5("4451711")."09519f");
结果:4c3dac55f41d67aeea814d09d5865aa9

8 个解决方案

#1


该回复于2011-07-30 10:25:22被版主删除

#2


java 的 md5 结果都是大写字母。
php 的 md5 结果都是小写字母。

java的32位MD5加密与php中的32位MD5加密结果不一样。求帮助。急急急
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具, 分享给大家,欢迎 技术交流 :)

#3


引用楼主 ycj19881116 的回复:
java: System.out.println(mad.toMd5(mad.toMd5("4451711")+"09519f").toLowerCase());   
结果:0169d79a79c506c7289359b1104f69ad
php: echo md5(md5("4451711")."09519f");
结果:4c3dac55f41d67aeea814d09d5865aa9


我这边测试的结果是一致的,JAVA的MD5需要写一个辅助方法,不像PHP中MD5加密那样方便,但是结果肯定是一致的,给出我的测试代码,你重新运行一下:

JAVA:



import java.security.MessageDigest;

public class Hello {
public final static String MD5(String s) {
  char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  'a', 'b', 'c', 'd', 'e', 'f' };
  try {
   byte[] strTemp = s.getBytes();
   //使用MD5创建MessageDigest对象
   MessageDigest mdTemp = MessageDigest.getInstance("MD5");
   mdTemp.update(strTemp);
   byte[] md = mdTemp.digest();
   int j = md.length;
   char str[] = new char[j * 2];
   int k = 0;
   for (int i = 0; i < j; i++) {
    byte b = md[i];
    //System.out.println((int)b);
    //将没个数(int)b进行双字节加密
    str[k++] = hexDigits[b >> 4 & 0xf];
    str[k++] = hexDigits[b & 0xf];
   }
   return new String(str);
  } catch (Exception e) {return null;}
  }
  //测试
public static void main(String[] args) {
  System.out.println(MD5(MD5("4451711")+"09519f"));
}
}




PHP:


<?php
echo md5(md5("4451711")."09519f");
?>

#4


两者的运行结果都为:

4c3dac55f41d67aeea814d09d5865aa9

#5


引用 3 楼 skyaspnet 的回复:
我这边测试的结果是一致的,JAVA的MD5需要写一个辅助方法,不像PHP中MD5加密那样方便,但是结果肯定是一致的,给出我的测试代码,你重新运行一下:

你的 MD5("4451711") 输出的是全小写字母,跟 PHP 的处理结果一样;
楼主的 mad.toMd5("4451711") 输出的是全大写字母,如果转换成小写,就跟 PHP 的结果一样了。

#6


一时没注意到,唉,没发现大小写不一样

#7


好像加密中文还是不一样,有没有碰到同样的问题

#8


这么老的帖子也翻出来了?

中文有字符集问题,不知你注意到没有

#1


该回复于2011-07-30 10:25:22被版主删除

#2


java 的 md5 结果都是大写字母。
php 的 md5 结果都是小写字母。

java的32位MD5加密与php中的32位MD5加密结果不一样。求帮助。急急急
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具, 分享给大家,欢迎 技术交流 :)

#3


引用楼主 ycj19881116 的回复:
java: System.out.println(mad.toMd5(mad.toMd5("4451711")+"09519f").toLowerCase());   
结果:0169d79a79c506c7289359b1104f69ad
php: echo md5(md5("4451711")."09519f");
结果:4c3dac55f41d67aeea814d09d5865aa9


我这边测试的结果是一致的,JAVA的MD5需要写一个辅助方法,不像PHP中MD5加密那样方便,但是结果肯定是一致的,给出我的测试代码,你重新运行一下:

JAVA:



import java.security.MessageDigest;

public class Hello {
public final static String MD5(String s) {
  char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  'a', 'b', 'c', 'd', 'e', 'f' };
  try {
   byte[] strTemp = s.getBytes();
   //使用MD5创建MessageDigest对象
   MessageDigest mdTemp = MessageDigest.getInstance("MD5");
   mdTemp.update(strTemp);
   byte[] md = mdTemp.digest();
   int j = md.length;
   char str[] = new char[j * 2];
   int k = 0;
   for (int i = 0; i < j; i++) {
    byte b = md[i];
    //System.out.println((int)b);
    //将没个数(int)b进行双字节加密
    str[k++] = hexDigits[b >> 4 & 0xf];
    str[k++] = hexDigits[b & 0xf];
   }
   return new String(str);
  } catch (Exception e) {return null;}
  }
  //测试
public static void main(String[] args) {
  System.out.println(MD5(MD5("4451711")+"09519f"));
}
}




PHP:


<?php
echo md5(md5("4451711")."09519f");
?>

#4


两者的运行结果都为:

4c3dac55f41d67aeea814d09d5865aa9

#5


引用 3 楼 skyaspnet 的回复:
我这边测试的结果是一致的,JAVA的MD5需要写一个辅助方法,不像PHP中MD5加密那样方便,但是结果肯定是一致的,给出我的测试代码,你重新运行一下:

你的 MD5("4451711") 输出的是全小写字母,跟 PHP 的处理结果一样;
楼主的 mad.toMd5("4451711") 输出的是全大写字母,如果转换成小写,就跟 PHP 的结果一样了。

#6


一时没注意到,唉,没发现大小写不一样

#7


好像加密中文还是不一样,有没有碰到同样的问题

#8


这么老的帖子也翻出来了?

中文有字符集问题,不知你注意到没有