2009-12-16 50 views
0

那麼,我需要保存具有唯一文件名的圖像並將文件名存儲在數據庫中。我曾經做過MD5哈希,並用哈希值獲得的值的文件名保存圖像。在PHP中創建自己的散列?

但是我想減少不必要的空間使用從32個字符到10-12個字符。

我不想substr()獲得的md5哈希到12個字符。

而不是有沒有辦法創建10-12個字符的自定義哈希?

+3

您可以用16個字符表示128位MD5哈希值。 – Gumbo 2009-12-16 08:58:10

+0

請注意你*仍然*必須檢查重複。 – 2011-10-26 13:04:39

回答

1

您可以用16個字符(每個字符8位而不是4位)來表示128位MD5哈希值。

+0

你能舉個例子嗎?謝謝 – 2009-12-16 09:01:31

+0

例如:1字節= 1個字符。 128位= 16字節。 => 128位= 16個字符。 'md5(「string」,true)'提供16個字符。 **小心!**字符串也將包含\ 0等。 – Boldewyn 2009-12-16 09:09:21

+0

將相同的值插入mysql數據庫(utf-8歸類)還是需要執行過濾器是否安全? – 2009-12-16 09:12:41

1

也許使用CRC32而不是MD5?它是8個字符,而不是32個,但它更接近你的目標。

+0

是啊,所以它的26^8在所有..我想它足夠 – 2009-12-16 09:02:18

+0

,但我不希望他們碰撞多數民衆贊成在我尋找10-12個字符 – 2009-12-16 09:09:05

1

CRC32是8個ASCII字符長。

+1

CRC32是一個校驗和 - 不是真正的哈希。幾乎每50K crc32(),你會得到一個副本。 – mixdev 2011-05-05 18:58:40

2

怎麼樣使用下面的函數的tempnam

​​

「創建一個具有唯一文件名的文件時,設置爲0600,在指定的目錄訪問權限。如果該目錄不存在,tempnam()可能在系統的臨時目錄中生成一個文件,並返回該文件的名稱。「

+0

我其實不想創建文件,我想將帶有唯一名稱的上傳文件移動到目錄中。考慮到這個功能,我將不得不創建一個tmp文件,讀取上傳的文件,覆蓋tmp文件。難道你不覺得它只會將文件從一個位置移動到另一個位置嗎? – 2009-12-16 09:18:35

+1

根據文件的大小和上傳的規律性,額外的開銷應該是最小的 – Lizard 2009-12-16 09:21:11