在不丢失数据的情况下最小化/转换字符串

Minimize / Transform string without losing data

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

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

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

有什么方法可以最小化字符串 (key) 的长度,并将其减少到 256 个字符,同时又不丢失它的数据(它的唯一性)?

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

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

您可以使用 SHA1 或 SHA256 等算法对字符串进行单向哈希处理。两个字符串散列成相同值的可能性非常小,但这种可能性极小。

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

这假定您不需要能够取回原始键值,只需要保持其唯一性。

每个 C# 对象(包括字符串)都实现 GetHashCode() 方法。但是,我认为这不适合您的问题,因为它不能保证在不同版本的 .NET 中给出相同的答案,而且我相信它比 SHA1 之类的东西发生冲突的可能性更高。