2015-08-20 33 views
-2

我有JAVA AES加密邏輯Java的MD5到PHP轉換

private static byte[] getMD5(String input) { 
     try { 
     byte[] bytesOfMessage = input.getBytes("UTF-8"); 
      MessageDigest md = MessageDigest.getInstance("MD5"); 
      return md.digest(bytesOfMessage); 
     } catch (Exception e) { 
     } 
     return null; 
    } 

會有什麼PHP相當於這個功能的? 我在php中使用了md5($ string),但輸出在兩種情況下都不相同。

+0

不,代碼在不同的問題 – genesis

+0

代碼是不同的,你可以從中獲得幫助並在你的代碼上實現,沒有人會爲你提供確切的代碼。 –

+0

當我在String中執行String md5Value = new String(md.digest(bytesOfMessage));在PHP中它相當於echo md5($ str,true);你能提出如何將md5($ str,true)轉換爲md.digest(bytesOfMessage)? – genesis

回答

1

在你發佈的代碼中,你得到了md5散列的字節數組。 PHP的md5()函數以十六進制形式返回md5散列。

所以,如果你想獲得MD5哈希在java字符串處理,你可以像這樣:

private static String getMD5(String input) { 
    try { 
     byte[] bytesOfMessage = input.getBytes("UTF-8"); 
     MessageDigest md = MessageDigest.getInstance("MD5"); 
     // byte array of md5 hash 
     byte[] md5 = md.digest(bytesOfMessage); 
     // we convert bytes to hex as php's md5() would do 
     StringBuffer stringBuffer = new StringBuffer(); 
     for (int i = 0; i < md5.length; i++) { 
      stringBuffer.append(Integer.toString((md5[i] & 0xff) + 0x100, 16).substring(1)); 
     } 
     return stringBuffer.toString(); 
    } catch (Exception e) { 
    } 
    return null; 
} 

從PHP,你可以通過做md5('some string', true)獲取該行MD5二進制文件。有關它的功能文檔,請參見md5()

要獲取字節數組,您可以執行unpack('c*', md5('some string',true))。有關更多信息,請參見unpack()函數和可能的formats

+0

感謝Master_ex..I不能更改Java code..I已經實現相同code..Can的PHP版本,你告訴我在Java中,當我傳球SecretKeySpec SKEY =新SecretKeySpec(getMD5(鍵), 「AES」); ..我如何在PHP中實現這個...在Java中我得到bytesOfMessage = 「[B @ 7b11a3ac」 ......雖然在PHP如果我?將使用你提到的解壓縮我將得到一個數組..請建議 – genesis

+1

bytesOfMessage是一個字節數組。如果您嘗試打印它,您將看不到數組的內容,但正如您所說,您會看到類似於[B @ 7b11a3ac'的東西。但是,如果逐個打印值,則會得到相同的內容。你可以這樣做:for(byte b:getMD5(key))System.out.println(b);'。所以,java和php版本都是等價的。關於SecretKeySpec,顯然它的工作原理就像您要告訴您要將Java代碼轉換爲PHP一樣。我建議你閱讀[mcrypt](http://php.net/manual/en/book.mcrypt.php)庫,併發佈一個不同的問題,如果你仍然有問題。 –

+0

感謝噸Master_ex ...這有幫助! – genesis