本帖最后由 keita90 于 2011-08-12 10:28:25 编辑

解决方案 »

  1.   

     Java的源代码错误
    如下:dataFormatString = "%1$s, %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s, %11$s, %12s"; string dataToHash = String.Format(dataFormatString, ...); 应该是%12$s,寫錯了。
      

  2.   

    java写的,注意字符串编码方式,java和c#的要一样,不然结果不一样 public static void main(String[] args) throws Exception {
    System.out.println(getMD5("a", "utf-8"));
    } public static String getMD5(String str, String encoding) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(str.getBytes(encoding));
    byte[] result = md.digest();
    StringBuffer sb = new StringBuffer(32);
    for (int i = 0; i < result.length; i++) {
    int val = result[i] & 0xff;
    if (val < 0xf) {
    sb.append("0");
    }
    sb.append(Integer.toHexString(val));
    }
    return sb.toString().toUpperCase();
    }
      

  3.   

    a的md5值为0CC175B9C0F1B6A831C399E269772661
      

  4.   


    能否测一下123456的值是否为ce0bfd15059b68d67688884d7a3d3e8c
      

  5.   

    123456 的md5 为 
     e10adc3949ba59abbe56e057f20f883e
      

  6.   

    是滴,在涉及到非ASCII字符时,编码显得尤为重要
      

  7.   

    = =各位大侠 我需要得到ce0bfd15059b68d67688884d7a3d3e8c 这个结果 谢谢
      

  8.   

    楼主试试这样写
    MD5   md5     =   new   MD5CryptoServiceProvider(); 
    byte[]   fromData   =   System.Text.Encoding.Default.GetBytes(myString); 
    byte[]   targetData   =   md5.ComputeHash(fromData);上面用defalut的话,可以与java等其他语言的md5结果一致
      

  9.   

    各位大侠  我现在想要修改的是Java代码 .net+sqlserver数据库的值是不能改变的
      

  10.   

    查了下c#的api ,System.Text.UnicodeEncoding.Unicode.GetBytes(s)用的是utf-16 little-endian编码方式,用下面的代码就可以了
    public static void main(String[] args) throws Exception {
    System.out.println(getMD5("123456", "UTF-16LE"));
    } public static String getMD5(String str, String encoding) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(str.getBytes(encoding));
    byte[] result = md.digest();
    StringBuffer sb = new StringBuffer(32);
    for (int i = 0; i < result.length; i++) {
    int val = result[i] & 0xff;
    if (val < 0xf) {
    sb.append("0");
    }
    sb.append(Integer.toHexString(val));
    }
    return sb.toString().toUpperCase();
    }
      

  11.   

    重要的是编码方式选      UTF-16LE     这个
      

  12.   

     在输入“123456”时java和C#的inputPasswordBytes都为{49,0,50,0,51,0,52,0,53,0,54,0}
    编码改成UTF-16LE的确是对的但是经过MD5加密之后,byte[] hash却不同:
    Java [-50, 11, -3, 21, 5, -101, 104, -42, 118, -120, -120, 77, 122, 61, 62, -116]
    C# [206, 11, 253,21, 5,  155, 104, 214, 118,  136,  136, 77, 122, 61, 62, 140]
    好像已经接近正确了。。不知道怎么改
      

  13.   

    C#的byte的范围和java的不一样。。
      

  14.   


    顶lslz可以到网上找找有没有C#版的md5加密,再找个java版的md5加密,
      

  15.   

    把java里的byte    &   255就能得到c#里面的那个值了
    java跟C#的数据类型不一样的byte b = -50;
    int c = b & 255;

    System.out.println(c);
      

  16.   

    java的byte是有符号的,c#的是无符号的。
      

  17.   

    嘿嘿又查了下apisbyte是有符号类型的,可以跟java的通用
      

  18.   

    java和C#的md5确实是不一样的,java的需要补位就和C#的一样了