2012-07-25 51 views
1

我有一些由2025位表示的信息。爲了緩存的目的,我需要創建一個唯一的文件名(當然不會太長,所以FS會處理這個),這將代表這些位。每組位應該有唯一的文件名。將2025位轉換爲最短文件名

是md5適合這個嗎?如果不是,我應該使用什麼?

回答

2

結帳uniqid()。如果你是超偏執的人,把文件名的生成放在一個循環中,在那裏你檢查它是否存在。

$prefix = hash('sha256', $bits) . '-'; 
$filename = uniqid($prefix, true); 

這將創建位爲前綴的文件的SHA-256散列,並使用uniqid與文件是位後跟一個-的哈希的前綴創建一個唯一的文件名。

這應該會生成一個唯一的文件名,您可以通過對比特進行散列來識別。

+0

爲了緩存目的,我需要從這些位具有完全獨特的相同文件名。 – 2012-07-25 23:05:04

+0

是否可以生成兩次相同的位序列? – drew010 2012-07-25 23:05:49

+0

比特序列可以生成兩次,每次需要創建完全相同的文件名。 – 2012-07-25 23:13:38

2

您可以使用位的Base64 encoding。這將保證名稱的獨特性。

+1

base64將輸出比轉換爲字符串的位更大的文件名 – 2012-07-25 23:07:33

+0

什麼? 7位數位串如何比1位數的Base64編碼串短? – tskuzzy 2012-07-25 23:19:28

+0

如何從2025位創建7位數位串,即。 $位= 「111000000000000000100000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ......」 – 2012-07-25 23:45:37