我正在使用php轉換網站。我的部分過程是驗證圖像路徑不指向不存在的圖像(即沒有損壞的圖像)。由於許多頁面共享某些圖像,因此我設置了一個緩存陣列,以查看是否已檢查某個給定路徑的圖像文件是否存在。用於路徑緩存的快速,無碰撞散列算法?
使用原始路徑字符串作爲數組索引無法正常工作,所以我使用了md5()
,這就是訣竅。然而,轉換腳本需要很長時間,似乎很清楚,這是因爲md5的計算(我在過去幾天頻繁地運行轉換,並且我馬上注意到,只要我的緩存開始工作,腳本花了很長時間才能運行。)
所以我想知道是否有更快的哈希算法,我可以在我的緩存中使用,當然我需要一個不會產生衝突。由於這是一次性腳本,因此我不需要超級安全的不可破解的算法,只需要一個讓作業更快完成的算法。
This comment顯然是php提供給它的所有散列函數的列表。
編輯我沒有畫了很多關注這在我的評論,但是當我使用的路徑作爲緩存數組索引的普通字符串,它沒有工作。只要我將其更改爲md5散列,它就可以工作。如果我有更多的時間,我會解決這個問題,但這是一個一次性的項目,我不能花更多的時間,而不是我絕對需要的時間。
帖子編輯好吧,顯然我在做我的緩存方式有問題;當我將索引更改爲散列而導致緩存開始工作時,我必須改變某些內容,而不管哈希如何。人們說我的散列應該和文件路徑字符串一樣好,而且md5s也不需要那麼長。所以,我不知道我做錯了什麼,我沒有時間在這個項目中弄清楚。我會刪除這個問題,但它已經有答案。
沒有碰撞散列這樣的事情。散列基本上涉及獲取無限數量的輸入,並將它們映射到有限數量的輸出。即使在有限的數據集(當然,大小大於1),也無法保證任何散列算法都不會實際散列所有散列並檢查衝突,從而避免衝突。 –
如果MD5速度太慢,那麼你正在做一些非常錯誤的事情。過去5年內構建的任何機器都應該能夠每秒處理數百萬條路徑。關於你管理數組的方式很可能很慢;這個問題根本不可能是MD5。 – meagar
@Michael Madsen它只是無碰撞*足夠*。 – user151841