【问题标题】:Minimize / Transform string without losing data最小化/转换字符串而不丢失数据
【发布时间】:2015-01-17 09:22:06
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: c# asp.net encryption couchbase


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的,我刚刚尝试了SHA1 算法,它将187 字符串转换为28 字符(结果为p6hHaNN3VEJmxMGB0Ygj7AkAGp0=)。这个可以吗?我期待更大的结果
    • @RaraituL 你需要两个字典:1.SHA1(key) => key 2.SHA1(key) => value
    • 我推荐SHA2,它的抗碰撞性更好。
    • @ArtjomB。你的意思是双密钥加密?
    • @RaraituL 不,我的意思是您可以在散列时按键查找值,如果您需要实际的键,您可以在第一个字典中查找它。 key 是原始字典中的键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多