我使用Couchbase服务器来存储一些数据。
它作为字典Dictionary<string, object>
,其中key
是一个字符串,value
是存储的对象。
但是,我有一些限制,密钥不得超过256个字符,在我的情况下,它可能会发生。
有没有办法最小化字符串(key
)长度,并将其减少到256个字符,但不会丢失它的数据(它的唯一性)?
例如,string.Substring(0, 256)
不是一个好的解决方案。
我正在考虑加密算法或类似的东西。
答案 0 :(得分:0)
您可以使用SHA1或SHA256等算法对字符串进行单向散列。两个字符串可能会散列到相同的值的可能性很小,但这种可能性极小。
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(mystring));
return Convert.ToBase64String(hash);
}
这假设您不需要能够取回原始密钥值,只需要保持其唯一性。
每个C#对象(包括string)都实现了GetHashCode()方法。但是,我认为这不适合您的问题,因为它不能保证在不同版本的.NET中提供相同的答案,我相信它碰撞的可能性高于像SHA1这样的东西。