2012-01-02 26 views
8

Tôi đang sử dụng md5 để đảm bảo bài đăng của mình cho một backendserver đang chạy PHP. Các tham số được gửi qua HTTP Post.md5 với Android và PHP

Tôi có một vấn đề, kết quả tính toán md5 của tôi là khác nhau trên Android và máy chủ PHP nếu có ü, ä hoặc ö trong một trong các tham số đầu vào.

Trên Android, băm được tính thông qua chức năng này:

public static final String md5(final 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 ""; 
} 

trên máy chủ PHP tôi chỉ đơn giản sử dụng

md5() function. 
+1

Âm thanh như một vấn đề mã hóa (ISO-8859-1 so với UTF-8 chẳng hạn). Bạn đang sử dụng bộ ký tự nào? Bạn có thể hiển thị một số mã không? –

+0

chắc chắn, tôi sẽ chỉnh sửa bài đăng của mình. – tobias

+1

bằng cách này, bạn có thể muốn sử dụng SHA1 hoặc một thuật toán khác để bảo mật bài đăng của bạn ... MD% không an toàn nữa –

Trả lời

7

Hình như bạn cần phải vượt qua utf-8 chuỗi mã hóa để md5 trong PHP:

md5(utf8_encode($string)); 
+0

Thx, điều này bị thiếu. – tobias

1

Có thể là bạn đang sử dụng charset mặc định của nền tảng.

Thay vào đó, hãy thử:

digest.update(s.getBytes("UTF-8"); 
+0

Tôi đã thay thế digest.update() bằng của bạn, nhưng tôi vẫn có cùng một vấn đề. Có lẽ tôi phải đặt UTF-8 trên PHP? – tobias