package com.yeexing.webservice.util;import java.security.MessageDigest;public class MD5Util {
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 String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null || "".equals(charsetname))
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
else
resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
} catch (Exception exception) {
}
return resultString;
} private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i])); return resultSb.toString();
} private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
} private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
"e", "f" };
}

解决方案 »

  1.   

    C#直接就有MD5类,不需要翻译,直接使用。
      

  2.   

    MD5加密前几天整的  跟PHP加密后一样 不知道跟JAVA是不是一样
    static string MD5(string toCryString)
            {
                MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                return BitConverter.ToString(hashmd5.ComputeHash(Encoding.UTF8.GetBytes(toCryString))).Replace("-", "").ToLower();//asp是小写,把所有字符变小写
            }
      

  3.   

    http://www.cnblogs.com/dgjack/archive/2010/12/30/1921492.html
      

  4.   

    我用这段c#能否和上面的加密类一样
      ///   <summary>
        ///   给一个字符串进行MD5加密
        ///   </summary>
        ///   <param   name="strText">待加密字符串</param>
        ///   <returns>加密后的字符串</returns>
        public static string MD5Encrypt(string strText)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] result = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strText));
            return System.Text.Encoding.UTF8.GetString(result);
        }  
      

  5.   

    不一样,Java返回的是十六进制字符串,而不是Encoding编码的字符串。其实最后一句应该用这个函数调用
    return BytesToString(result);
            public static string BytesToString(byte[] input)
            {
                StringBuilder sb = new StringBuilder();
                foreach (byte b in input)
                {
                    sb.Append(b.ToString("X2"));
                }
                return sb.ToString();
            }
            public static byte[] StringToBytes(string input)
            {
                int len = input.Length;
                if (len % 2 != 0)
                {
                    throw new Exception("输入的字符串长度有误,必须是偶数。");
                }
                byte[] bytes = new byte[len / 2];
                for (int i = 0; i < len / 2; i++)
                {
                    if (!byte.TryParse(input.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber, null, out bytes[i]))
                    {
                        throw new Exception(string.Format("在位置{0}处的字符无法转换为16进制字节", i * 2 + 1));
                    }
                }
                return bytes;
            }
      

  6.   

    我现在改成这个函数了是否一样        /**//// <summary>
            /// MD5 32位加密
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
           static  string UserMd5(string str)
            {
                string cl = str;
                string pwd = "";
                 MD5 md5 = MD5.Create();//实例化一个md5对像
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
                // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
                for (int i = 0; i < s.Length; i++)
                {
                    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符                  pwd = pwd + s[i].ToString("x");
                    
                 }
                return pwd;
             
         }
      

  7.   

    ToString("x") 就是转换为16进制字符