private void addExtendInfo () {        
 
        byte[] auth_info = md5(userid+passwd+email+current_time);

    }    private byte[] md5(String s) {
      try {
        java.security.MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
        digest.update(s.getBytes());
        return digest.digest();
      } catch (java.security.NoSuchAlgorithmException e) {
        e.printStackTrace();
      }
      return null;
    }我打印 auth_info 这个值 发现他是     %3Fyb%B9%D8%3Ffq%3F%3F%3F 
这样的,可是在我印象中MD5加密后应该是 937c005be307cfea0d7b0d1e2fc031e7请大家帮我看下我应该怎么改才让他显示下面的这样的,我不要上面的这样的,因为这个md5是发到别人的服务器去验证的,人家那头我改不了

解决方案 »

  1.   

    给你个例子吧:
    public class MD5Util { private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
    "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; public 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 + n;
    int d1 = n / 16;
    int d2 = n % 16;
    return hexDigits[d1] + hexDigits[d2];
    } public static String Encode(String origin) {
    String resultString = null; try {
    resultString = new String(origin);
    MessageDigest md = MessageDigest.getInstance("MD5");
    resultString = byteArrayToHexString(md.digest(resultString
    .getBytes()));
    } catch (Exception ex) { }
    return resultString;
    } public static void main(String[] args) {
    System.err.println(Encode("BEST"));
    }
    }
      

  2.   

    给你一个函数:
    public static String MD5(String str){
    StringBuffer buf = new StringBuffer("");
    try {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(str.getBytes());
    byte b[] = md.digest(); int i;
    for (int offset = 0; offset < b.length; offset++) {
    i = b[offset];
    if(i<0) i+= 256;
    if(i<16)
    buf.append("0");
    buf.append(Integer.toHexString(i));
    }

    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    }
    return buf.toString();
    }
      

  3.   

    auth_info的MD5应该是f58768c8843fb8508a1c901a6c44612e关键是你得到byte[]之后需要将它转换成字符串,但是不能直接new String(buff)的。必须类似以下代码转换:byte[] b = md.digest();
    for(int i = 0; i < b.length; i++) {
    int bb = b[i] & 0xFF;
    System.out.print(bb  < 16 ? ("0" + Integer.toHexString(bb)) : Integer.toHexString(bb));
    }
      

  4.   

    Integer.toHexString(i)
    把得到的byte[] 转换成16进制 就是你要的了