2012-01-11 58 views
3

在這裏我們有一個場景來編碼文件名,並希望在檢索時對其進行解碼。 如果我用md5編碼它,我不能解碼它,因爲它是單向散列,如果我用'base64_encode'編碼它,那麼如果兩個同名的文件在檢索時會導致與我的數據衝突。在php中是否有任何獨特的編碼和解碼功能?

所以我想知道是否有在PHP中的任何獨特的編碼功能編碼和以後解碼。

在此先感謝!

+1

所以你想要一個雙向加密算法,將相同的輸入給不同的結果? – lonesomeday 2012-01-11 10:11:59

+0

嘆氣,MD5是**不**編碼。除此之外,它也會爲相同的輸入返回相同的哈希值,非常類似於base64_encode將返回相同輸入的相同base64字符串 – knittl 2012-01-11 10:13:03

+0

您試圖解決什麼問題? – knittl 2012-01-11 10:15:16

回答

5

你可以使用BASE64_ENCODE和前面加上這樣一個唯一的標識符:

$encoded = base64_encode(uniqid().$filename); //$filename is your filename 

而且像這樣解碼:

$decoded = base64_decode($encoded); 
$filename = substr($decoded, 13); 

這將基本上給你這是唯一的文件名的編碼字符串,可以顛倒爲文件名。

+0

唯一的ID在某種意義上,蘭特數最多四位數像你說的那樣? – Pushparaj 2012-01-11 10:29:06

+1

'uniqid()'是一個給你一個13位數的microtime的php函數,這對服務器來說是唯一的,你不能像隨機數那樣得到碰撞。代碼實際上按原樣工作。 – bardiir 2012-01-11 10:31:18

+0

感謝兄弟......正是這個期待...... – Pushparaj 2012-01-11 10:32:32