那麼,我需要保存具有唯一文件名的圖像並將文件名存儲在數據庫中。我曾經做過MD5哈希,並用哈希值獲得的值的文件名保存圖像。在PHP中創建自己的散列?
但是我想減少不必要的空間使用從32個字符到10-12個字符。
我不想substr()獲得的md5哈希到12個字符。
而不是有沒有辦法創建10-12個字符的自定義哈希?
那麼,我需要保存具有唯一文件名的圖像並將文件名存儲在數據庫中。我曾經做過MD5哈希,並用哈希值獲得的值的文件名保存圖像。在PHP中創建自己的散列?
但是我想減少不必要的空間使用從32個字符到10-12個字符。
我不想substr()獲得的md5哈希到12個字符。
而不是有沒有辦法創建10-12個字符的自定義哈希?
您可以用16個字符(每個字符8位而不是4位)來表示128位MD5哈希值。
你能舉個例子嗎?謝謝 – 2009-12-16 09:01:31
例如:1字節= 1個字符。 128位= 16字節。 => 128位= 16個字符。 'md5(「string」,true)'提供16個字符。 **小心!**字符串也將包含\ 0等。 – Boldewyn 2009-12-16 09:09:21
將相同的值插入mysql數據庫(utf-8歸類)還是需要執行過濾器是否安全? – 2009-12-16 09:12:41
也許使用CRC32而不是MD5?它是8個字符,而不是32個,但它更接近你的目標。
是啊,所以它的26^8在所有..我想它足夠 – 2009-12-16 09:02:18
,但我不希望他們碰撞多數民衆贊成在我尋找10-12個字符 – 2009-12-16 09:09:05
PHP's Hash message digest framework提供了大量的散列算法。玩的開心!
確定每個哈希的長度,see Wikipedia。
偉大的原因!謝謝你:) – 2009-12-16 08:59:23
不客氣! – Boldewyn 2009-12-17 08:03:38
怎麼樣使用下面的函數的tempnam
「創建一個具有唯一文件名的文件時,設置爲0600,在指定的目錄訪問權限。如果該目錄不存在,tempnam()
可能在系統的臨時目錄中生成一個文件,並返回該文件的名稱。「
我其實不想創建文件,我想將帶有唯一名稱的上傳文件移動到目錄中。考慮到這個功能,我將不得不創建一個tmp文件,讀取上傳的文件,覆蓋tmp文件。難道你不覺得它只會將文件從一個位置移動到另一個位置嗎? – 2009-12-16 09:18:35
根據文件的大小和上傳的規律性,額外的開銷應該是最小的 – Lizard 2009-12-16 09:21:11
您可以用16個字符表示128位MD5哈希值。 – Gumbo 2009-12-16 08:58:10
請注意你*仍然*必須檢查重複。 – 2011-10-26 13:04:39