2012-01-10 51 views
-3

所以這裏是一個已經存在java的MD5哈希,PHP函數來檢查

StringBuffer sbTemp = new StringBuffer(); 
byte[] btTypeInPasswd = this.md.digest(this.password.getBytes()); 

for (int i = 0; i < btTypeInPasswd.length; i++) 
    sbTemp = sbTemp.append(btTypeInPasswd[i]); 

this.password = sbTemp.toString(); 

this.password然後將包含一個字符串像如下如果密碼是測試一個java功能:-8774-113-27- 52-79-101-9028768115-45-111-23-121-10447-69-45

我需要的是一個PHP函數來產生相同的結果,可以這樣做嗎?

I can not編輯java .class文件,因爲這是現有應用程序的一部分,我希望通過訪問它的現有數據庫來一起工作。

這就是我試過的。

$bytes = md5("test", true); 
$bArray = array(); 

for ($x = 0; $x < strlen($bytes); $x++) 
    $bArray[$x] = ord(substr($bytes, $x, 1)); 

print "<pre>" . implode('-', $numbers) . "</pre>"; 

然而,使用相同的密碼「測試」它產生:9-143-107-205-70-33-211-115-202-222-78-131-38-39-180-246不根本就像-8774-113-27-52-79-101-9028768115-45-111-23-121-10447-69-45

謝謝。

+0

哇靠,我犯了一個錯誤通過不發佈我已經嘗試過的東西,我只是假設每個人都會認爲我已經嘗試了像ord這樣明顯的東西,打包/解包等等......我的壞處。 – Joe 2012-01-10 17:08:39

回答

1

所以不要感謝巨魔,如果其他人需要知道如何做到這一點是如何。

function md5_hash($password) 
{ 
    $hashArray = array(); 
    $hash = md5($password); 

    for ($x = 0; $x < strlen($hash); $x += 2) 
     $hashArray[$x] = (($dec = hexdec(substr($hash, $x, 2))) > 127 ? $dec - 256 : $dec); 

    return implode("", $hashArray); 
} 

使用密碼「test」會導致上述函數返回一個字符串:9-113107-517033-45115-54-3478-1253839-76-10

+1

Trolls在stackoverflow上免費運行。 – EGHDK 2012-03-14 21:56:57

0

PHP有一個內置的給定一個字符串md5()函數返回一個32字符十六進制消化,如:

<? echo md5('test'); ?> 

給出:

098f6bcd4621d373cade4e832627b4f6 

所以,如果你解決您的Java代碼輸出十六進制而不是十進制,結果應該與匹配。

+0

這不是一個選項,因爲我無法控制java代碼,因爲它是現有應用程序的一部分,所以我只想在PHP中一起工作,訪問它的現有數據庫。 – Joe 2012-01-10 16:40:52

0
$md5 = md5('...... your string here ....'); 
$numbers = array(); 
for ($i = 0; $i < strlen($md5); $i++) { 
    $numbers[i] = ord(substr($md5, $i, 1)); 
} 

echo implode('-', $numbers); 
+0

這不起作用我必須編輯你的函數有點像這樣'$ md5 = md5(「test」,true); \t \t $ numbers = array(); \t \t \t \t爲($ I = 0; $ I " . implode('-', $numbers) . "」;然而'將產生:9-143-107-205-70-33-211-115-202-222-78-131-38-39-180-246 – Joe 2012-01-10 16:45:40