日期:2014-05-20  浏览次数:20705 次

java生成的md5怎么同c#生成的md5值不一样????
asp.net中
FormsAuthentication.HashPasswordForStoringInConfigFile( "jack ", "md5 ");
其值为4FF9FC6E4E5D5F59C4F2134A8CC96D1
c#中
  string   cl   =   "jack ";
  string   pwd   =   " ";
  MD5   md5   =   MD5.Create();//实例化一个md5对像
  byte[]   s   =   md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
  for   (int   i   =   0;   i   <   s.Length;   i++)
  {
        pwd   =   pwd   +   s[i].ToString( "X ");
    }
pwd为4FF9FC6E4E5D5F59C4F2134A8CC96D1
而java中

import   java.security.*;


public   class   MD5_ok   {

  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();
      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   byte0   =   md[i];
        str[k++]   =   hexDigits[byte0   > > >   4   &   0xf];
        str[k++]   =   hexDigits[byte0   &   0xf];
      }
      return   new   String(str);
    }   catch   (Exception   e)   {
      return   null;
    }
  }

  public   static   void   main(String[]   args)   {
    //   MD5_Test   aa   =   new   MD5_Test();

    System.out.print(MD5_ok.MD5( "jack "));
  }
}
返回值为
73c18c59a39b18382081ec00bb456d43

这个是什么原因???


------解决方案--------------------
可能是算法不一样
------解决方案--------------------
MD5加密后的字节码是一样的,不一样的是字节码转换成字符的地方。字节码不可能都是字符,有可能是一些不能显示的控制符什么的,所以每个程序对这个转换都不一样。找到它不一样的地方,改成一致的。或者,把密码验证都交给c#
------解决方案--------------------
java出来的是
4ff9fc6e4e5d5f590c4f2134a8cc96d1
------解决方案--------------------
byte[] md = ..
StringBuffer buff = new StringBuffer();
for (int i = 0; i < j; i++) {
String str = Integer.toHexString(md[i] & 0xFF);
buff.append(str.length() == 1 ? "0 " + str : str);
}
buff.toString();