2011-02-16 139 views
0

我試圖創建一個文件名散列(鍵)和文件名(值)的數組,但我使用的大多數功能似乎並不像我想要他們...php bin2hex,base64_encode;不同的輸入相同的輸出(在循環中)?

爲什麼這些函數在使用一個循環導致相同的輸出字符串,而輸入字符串變化? md5和sha1沒有這個問題,但是不可逆並且這是必需的。

foreach ($files as $file) 
{ 
    debug(array(bin2hex($file), $file)); 
} 

// result 
app/views/helpers/monolith.php (line 45) 

Array 
(
    [0] => 2f686f6d652f6d746572736d697474656e2f7075626c69635f68746d6c2f6170702f707269766174652f6d622f323031302f31322e706466 
    [1] => /home/mtersmitten/public_html/app/private/mb/2010/12.pdf 
) 


app/views/helpers/monolith.php (line 45) 

Array 
(
    [0] => 2f686f6d652f6d746572736d697474656e2f7075626c69635f68746d6c2f6170702f707269766174652f6d622f323031302f31312e706466 
    [1] => /home/mtersmitten/public_html/app/private/mb/2010/11.pdf 
) 


app/views/helpers/monolith.php (line 45) 

Array 
(
    [0] => 2f686f6d652f6d746572736d697474656e2f7075626c69635f68746d6c2f6170702f707269766174652f6d622f323031302f31302e706466 
    [1] => /home/mtersmitten/public_html/app/private/mb/2010/10.pdf 
) 

我希望這個例子更清晰......

+0

我不能說`bin2hex()` - 也許它只是使用部分輸入字符串或扼流圈或其他東西 - 但`base64_encode()`應該工作正常。 – 2011-02-16 17:40:02

+3

你應該再看一遍。鑰匙確實不同。 `3132`是12.pdf的十六進制編碼,11.pdf是`3131`。也許你應該解釋你的用例。由於您現在使用的密鑰只是混淆的文件名。 – mario 2011-02-16 17:42:30

回答

4

實際上字符串是不同的。你應該仔細檢查。他們大部分是相同的,因爲這兩個BIN2HEXBASE64_ENCODE編碼字節序列,並不會產生像SHA1MD5哈希值。

BIN2HEX每個字符只是將字符串轉換爲它的十六進制值,並以此爲的base64,檢查wikipedia article,看看究竟爲什麼字符串是結果

2
... f6d622f323031302f31322e706466 
         ^
         1 2 . p h p 
... f6d622f323031302f31312e706466 
         ^
         1 1 . p h p 
... f6d622f323031302f31302e706466 
         ^
         1 0 . p h p 

的很大一部分相同我所指出的地方你的「哈希」是不同的。 bin2hex不是加密或散列函數,它只是將輸入字符串的每個字符轉換爲其十六進制ascii代碼的字符串版本。

相關問題