2015-01-17 53 views
0

我正在使用Couchbase服務器來存儲一些數據。最小化/轉換字符串而不丟失數據

它可以作爲字典,Dictionary<string, object>,其中key是一個字符串,而value是存儲的對象。

但是,我有限制,該鍵不能超過256個字符,在我的情況下,它可能會發生。

有什麼辦法可以最大限度地減少字符串(key)的長度,並將其減少到256個字符,但不會丟失它的數據(它的唯一性)?

例如,string.Substring(0, 256)不會是一個好的解決方案。

我在想一個加密算法或類似的東西。

回答

0

您可以使用諸如SHA1或SHA256等算法對字符串進行單向散列。兩個字符串可能散列成相同的值的可能性非常小,但極不可能。

using (SHA1Managed sha1 = new SHA1Managed()) 
{ 
    var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(mystring)); 
    return Convert.ToBase64String(hash); 
} 

這假設你不需要能夠找回原來的鍵值,只需要保持其唯一性。

每個包含字符串的C#對象都實現GetHashCode()方法。不過,我認爲這不太適合你的問題,因爲它不能保證在不同版本的.NET中給出相同的答案,並且我認爲它比SHA1更有可能發生衝突。

+0

好的,我剛剛嘗試過'SHA1'算法,它在'28'字符中轉換了一個'187'字符串(結果是'p6hHaNN3VEJmxMGB0Ygj7AkAGp0 =')。這個可以嗎?我期待一個更大的結果 – Catalin

+1

@RaraituL你需要兩個字典:1. SHA1(key)=> key' 2. SHA1(key)=>值' –

+1

我推薦SHA2,它具有更好的抗碰撞性。 – CodesInChaos

相關問題