2010-07-29 69 views
1

我設計了一個工具的用戶界面,用戶需要輸入最多300個字符的「名稱」,並且該工具生成一個文本文件(「Name」.txt),然後將其上傳到「服務器」(Mainframe和Unix)。我想將300個字符的字符串縮短爲唯一可識別的8個字符的字符串(因爲問題主要在大型機中),就像使用某種哈希算法的tinyurl。我找到了一個SHA1實現,但結果字符串長度爲40個字符。有人可以爲該算法提供VBA實現嗎?將300個字符的字符串轉換爲VBA中唯一可識別的8個字符的字符串

生成的字符串長度爲8個字符的要求是嚴格的 - 我的猜測是,它應該是可行的,因爲我們對輸入字符串的大小有限制。

回答

1

我認爲Jens的想法應該可以正常工作。 如果截斷SHA-1哈希不是你的東西,你可以使用CRC-32(32位〜8位ASCII字符從0..f)。 (你可以嘗試使用this example) 就碰撞而言,CRC-32不太安全,但最終取決於你。

3

您可以只取SHA1哈希的前八個字符。儘管如此,這些哈希值(如原始的40個字符版本)並不保證是唯一的。如果您需要唯一性,您可能需要將每個名稱與其簡短版本一起存儲,並只發布目前尚未使用的短名稱。 (這就是tinyurl所做的。)

+0

雖然我對統計數學並沒有任何瞭解,但只是將前八個字符切掉會大大增加碰撞的機率。 – MvanGeest 2010-07-29 08:37:10

+1

@MvanGeest:是的,它會的,但它可能還是夠好的。如果您需要8個字符的base64編碼散列,則您有64^8 = 2.8E14個不同的組合。如果哈希值相當隨機,在約2000萬條目中碰撞的機率達到50%,有200萬條條目的機會不到1%。 – Jens 2010-07-29 08:53:07

相關問題