猿问

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

.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);

        }

慕田峪4524236
浏览 615回答 4
4回答

蛊毒传说

时代变了,我们有SHA3赢家。我建议使用SHA3竞赛的keccak(又名SHA3)获胜者。原始答案:以最弱到最强的顺序,我会说:RIPEMD BROKEN,不应该使用,因为在此pdf中可以看到MD-5破碎,切勿使用,可在2分钟内用笔记本电脑破碎SHA-1&nbsp;损坏,原则上不要使用,原则上已被破坏,到本周攻击越来越好SHA-2弱,在未来几年内可能会损坏。发现了一些弱点。请注意,通常,密钥大小越大,散列函数破解的难度就越大。虽然密钥大小=强度并不总是正确的,但大多数情况下都是正确的。因此SHA-256可能比SHA-512弱。Skein不为人知的弱点,是SHA-3的候选人。它是相当新的,因此未经测试。它已经以多种语言实现。MD6未知的弱点,是SHA-3的另一种候选方案。可能比Skien强,但在单核计算机上则慢。像Skien一样,未经测试。一些具有安全意识的开发人员正在以任务关键型角色使用它。我个人会使用MD6,因为永远不会太偏执。如果真正关心速度,我会考虑使用Skein或SHA-256。

杨__羊羊

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