在不丢失数据的情况下最小化/转换字符串
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 之类的东西发生冲突的可能性更高。
我正在使用 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 之类的东西发生冲突的可能性更高。