为了账号安全,请及时绑定邮箱和手机立即绑定

我应该选择哪个加密哈希函数? 问问题

我应该选择哪个加密哈希函数? 问问题

慕田峪4524236 2019-11-22 13:07:04
.NET框架附带6种不同的哈希算法:MD5:16个字节(散列时间500MB:1462毫秒)SHA-1:20个字节(1644毫秒)SHA256:32个字节(5618毫秒)SHA384:48个字节(3839毫秒)SHA512:64个字节(3820毫秒)RIPEMD:20个字节(7066 ms)这些功能中的每个功能都有不同。MD5是最快的,而RIPEMD是最慢的。MD5的优点是适合内置的Guid类型。它是类型3 UUID的基础。SHA-1哈希是类型5 UUID的基础。这使得它们非常易于识别。但是,MD5容易受到碰撞攻击,SHA-1也容易受到攻击,但是程度较小。在什么情况下应该使用哪种哈希算法?我真的很想知道答案的具体问题是:MD5不值得信赖吗?在正常情况下,当您使用没有恶意意图的MD5算法并且任何第三方都没有恶意意图时,您会期望发生任何冲突(这意味着两个任意byte []会产生相同的哈希)RIPEMD比SHA1好多少?(如果更好),其计算速度要慢5倍,但哈希大小与SHA1相同。在对文件名(或其他短字符串)进行哈希处理时,获得非恶意冲突的几率是多少?(例如,两个具有相同MD5哈希值的随机文件名)(带有MD5 / SHA1 / SHA2xx)通常,非恶意冲突的几率是多少?这是我使用的基准:    static void TimeAction(string description, int iterations, Action func) {        var watch = new Stopwatch();        watch.Start();        for (int i = 0; i < iterations; i++) {            func();        }        watch.Stop();        Console.Write(description);        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);    }    static byte[] GetRandomBytes(int count) {        var bytes = new byte[count];        (new Random()).NextBytes(bytes);        return bytes;    }    static void Main(string[] args) {        var md5 = new MD5CryptoServiceProvider();        var sha1 = new SHA1CryptoServiceProvider();        var sha256 = new SHA256CryptoServiceProvider();        var sha384 = new SHA384CryptoServiceProvider();        var sha512 = new SHA512CryptoServiceProvider();        var ripemd160 = new RIPEMD160Managed();        var source = GetRandomBytes(1000 * 1024);        var algorithms = new Dictionary<string,HashAlgorithm>();        algorithms["md5"] = md5;        algorithms["sha1"] = sha1;        algorithms["sha256"] = sha256;        algorithms["sha384"] = sha384;        algorithms["sha512"] = sha512;        algorithms["ripemd160"] = ripemd160;        foreach (var pair in algorithms) {            Console.WriteLine("Hash Length for {0} is {1}",                 pair.Key,                 pair.Value.ComputeHash(source).Length);        }
查看完整描述

4 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

时代变了,我们有SHA3赢家。我建议使用SHA3竞赛的keccak(又名SHA3)获胜者。

原始答案:

以最弱到最强的顺序,我会说:

  1. RIPEMD BROKEN,不应该使用,因为在此pdf中可以看到

  2. MD-5破碎,切勿使用,可在2分钟内用笔记本电脑破碎

  3. SHA-1 损坏,原则上不要使用,原则上已被破坏,到本周攻击越来越好

  4. SHA-2弱,在未来几年内可能会损坏。发现了一些弱点。请注意,通常,密钥大小越大,散列函数破解的难度就越大。虽然密钥大小=强度并不总是正确的,但大多数情况下都是正确的。因此SHA-256可能比SHA-512弱。

  5. Skein不为人知的弱点,是SHA-3的候选人。它是相当新的,因此未经测试。它已经以多种语言实现。

  6. MD6未知的弱点,是SHA-3的另一种候选方案。可能比Skien强,但在单核计算机上则慢。像Skien一样,未经测试。一些具有安全意识的开发人员正在以任务关键型角色使用它。

我个人会使用MD6,因为永远不会太偏执。如果真正关心速度,我会考虑使用Skein或SHA-256。


查看完整回答
反对 回复 2019-11-22
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

在MD5的防御中,没有已知的方法来生成带有任意MD5哈希的文件。原作者必须事先计划好有工作上的冲突。因此,如果接收方信任发送方,则MD5可以。如果签名人是恶意的,则MD5会被破坏,但是它不容易受到中间人攻击。


查看完整回答
反对 回复 2019-11-22
  • 4 回答
  • 0 关注
  • 614 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信