public static String getDigestStr(String info) {
try {
byte[] res = info.getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] result = md.digest(res);
for (int i = 0; i < result.length; i++) {
md.update(result[i]);
}
byte[] hash = md.digest();
StringBuffer d = new StringBuffer("");
for (int i = 0; i < hash.length; i++) {
int v = hash[i] & 0xFF;
if (v < 16) {
d.append("0");
}
d.append(Integer.toString(v, 16).toUpperCase());
}
return d.toString();
} catch (Exception e) {
return null;
}
}
感谢!

解决方案 »

  1.   

     public static String getDigestStr(String info)
        {
            try
            {
                byte[] res = System.Text.Encoding.UTF8.GetBytes(info);
                MD5CryptoServiceProvider md = new MD5CryptoServiceProvider();
                byte[] result = md.ComputeHash(res);            StringBuilder sbuilder = new StringBuilder();
                for (int i = 0; i < result.Length; i++)
                {
                    int v = result[i] & 0xFF;
                    if (v < 16)
                    {
                        sbuilder.Append("0");
                    }
                    sbuilder.Append(Convert.ToString(v, 16).ToUpper());
                }
                return sbuilder.ToString();        }
            catch
            {
                return null;
            }
        }
      

  2.   

    加密的字符串:10060012010111116141700000001835612
    C#加密后:CD12F4D32925259B160A3D2AC631B873 
    Java加密后:D45602626A3FC3A23C5D0D1E0990E0A0还是不一致呢!!
      

  3.   

    是这是在这里 JAVA的用了GBK的? C#用了UTF-8的?
      

  4.   

    JAVA里说是ASCII,C#里也用了ASCII,可也是不一致!
      

  5.   

    for (int i = 0; i < result.length; i++) {
    md.update(result[i]);
    }
    byte[] hash = md.digest();怎么把这段反映成C#呢???
      

  6.   

    Ghost_Khz
    请再给翻译一下,多谢了!
      

  7.   

    依稀记得C# 跟JAVA的做MD5加密的是貌似什么正好差128位.,,
      

  8.   

    Java byte存储的为 127到-128 而C# 不会计算负值 为0-255
      

  9.   

    for (int i = 0; i < result.length; i++) {
    md.update(result[i]);
    }
    byte[] hash = md.digest();怎么把这段反映成C#呢???
      

  10.   

    那个update是使用指定的Result数组元素来更新md 。。
      

  11.   

    我是调用java的接口,需要密码一致,所以才这样要求!
      

  12.   

            public static string MD5(string str)
            {
                byte[] b = Encoding.Default.GetBytes(str);
                b = new MD5CryptoServiceProvider().ComputeHash(b);
                StringBuilder ret = new StringBuilder();
                for (int i = 0; i < b.Length; i++)
                    ret.Append(b[i].ToString("x").PadLeft(2, '0'));
                return ret.ToString();
            }
      

  13.   

    for (int i = 0; i < result.length; i++) {
           md.update(result[i]);//使用指定的字节更新摘要
    }
    byte[] hash = md.digest();//完成哈希计算
    根据java里的解释好象不是移位吧!
      

  14.   

    lqkankan
    和之前的代码结果是一样的,还是和java的不一致!
      

  15.   

    连续计算两次摘要public static String getDigestStr(String info)
    {
    try
    {
    byte[] res = System.Text.Encoding.Default.GetBytes(info);
    MD5CryptoServiceProvider md = new MD5CryptoServiceProvider();
    byte[] result = md.ComputeHash(res);
    byte[] hash = md.ComputeHash(result);
    StringBuilder sbuilder = new StringBuilder();
    for (int i = 0; i < hash.Length; i++)
    {
    int v = hash[i] & 0xFF;
    if (v < 16)
    {
    sbuilder.Append("0");
    }
    sbuilder.Append(Convert.ToString(v, 16).ToUpper());
    }
    return sbuilder.ToString();
    }
    catch
    {
    return null;
    }
    }