首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >6字符短哈希算法

6字符短哈希算法
EN

Stack Overflow用户
提问于 2013-08-27 19:47:07
回答 2查看 23.3K关注 0票数 13

我的目标是为一个长度为42个不区分大小写的字母数字字符的字符串生成一个6个字符(可能包含字符A-Z0-9)的短Hash字符串。唯一性是关键要求。安全性或性能并不那么重要。

有没有特定的算法可以给出这个结果,或者我应该坚持截断MD5散列或Like in this question散列?如果是这样,碰撞的概率是多少?

EN

回答 2

Stack Overflow用户

发布于 2013-08-27 20:22:23

简单散列:)

代码语言:javascript
复制
private string Hash(string str)
{
    var allowedSymbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray();
    var hash = new char[6];

    for (int i = 0; i < str.Length; i++)
    {
        hash[i % 6] = (char)(hash[i % 6] ^ str[i]);
    }

    for (int i = 0; i < 6; i++)
    {
        hash[i] = allowedSymbols[hash[i] % allowedSymbols.Length];
    }

    return new string(hash);
}
票数 9
EN

Stack Overflow用户

发布于 2013-08-29 09:56:28

最好的解决方案几乎肯定是使用SHA1,转换为Base62 (尽管Base64会更容易,因为它内置在框架Convert.ToBase64String中。您必须做一些工作来寻找一个像样的Base62库),然后将输出截断为6字节。

我不会使用GetHashCode(),因为它有一个history of collision problems。(我并不是说这个特定的bug适用于您,只是提到这一点,作为GetHashCode在过去没有很好实现的证据。)

我也不会实现自定义的哈希算法,很容易意外地写出一个冲突率很高的算法。已经对SHA1和其他主要的散列算法进行了大量的研究和审查,您很难找到更好的算法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18464517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档