2012-07-24 137 views
0

在我的Android应用程序中,我使用MD5散列键来保证数据访问的安全性。我使用电子邮件+时间+“后缀”字符串来生成密钥。它运作良好。但问题是,当我使用至少有一个加号(+)的电子邮件地址(例如[email protected])时,服务器正在返回“不正确的访问密钥”消息。我注意到它正在使用减号(-),下划线(_)等签名的电子邮件地址,但它不适用于具有加号(+)符号的电子邮件地址。我生成MD5哈希键使用这种方法:为什么MD5哈希键与php生成的MD5哈希键不匹配?

public static String MD5_Hash(String s) { 
    try { 
     // Create MD5 Hash 
     MessageDigest digest = java.security.MessageDigest 
       .getInstance("MD5"); 
     digest.update(s.getBytes()); 
     byte messageDigest[] = digest.digest(); 

     // Create Hex String 
     StringBuffer hexString = new StringBuffer(); 
     for (int i = 0; i < messageDigest.length; i++) { 
      String h = Integer.toHexString(0xFF & messageDigest[i]); 
      while (h.length() < 2) 
       h = "0" + h; 
      hexString.append(h); 
     } 
     return hexString.toString(); 

    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    return ""; 
} 

回答

-1

这是我要做的事: -

public static String getMD5(String input) { 

byte[] source; 
try { 
    source = input.getBytes("UTF-8"); 
} catch (UnsupportedEncodingException e) { 
    System.out.println("Error!"); 
} 

String result = null; 
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', 
     '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; 
try { 
    MessageDigest md = MessageDigest.getInstance("MD5"); 
    md.update(source); 
    byte temp[] = md.digest(); 
    char str[] = new char[16 * 2]; 
    int k = 0; 
    for (int i = 0; i < 16; i++) { 
     byte byte0 = temp[i]; 
     str[k++] = hexDigits[byte0 >>> 4 & 0xf]; 
     str[k++] = hexDigits[byte0 & 0xf]; 
    } 
    result = new String(str); 
} catch (Exception e) { 
System.out.println("Error!"); 
} 
return result; 
} 
+0

什么是源? md.update(来源)?? – TKumar 2012-07-24 10:51:13