最小化/转换字符串而不会丢失数据

时间:2015-01-17 09:22:06

标签: c# asp.net encryption couchbase

我使用Couchbase服务器来存储一些数据。

它作为字典Dictionary<string, object>,其中key是一个字符串,value是存储的对象。

但是,我有一些限制,密钥不得超过256个字符,在我的情况下,它可能会发生。

有没有办法最小化字符串(key)长度,并将其减少到256个字符,但不会丢失它的数据(它的唯一性)?

例如,string.Substring(0, 256)不是一个好的解决方案。

我正在考虑加密算法或类似的东西。

1 个答案:

答案 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这样的东西。