使用SHA1 MD5的组合

我正在尝试使用安全的方法为文件创建校验和(大于10GB!).

SHA256对我来说足够安全,但是这种算法过程昂贵而且不适合.
我知道SHA1和MD5校验和都是通过碰撞不安全的.

所以我认为最快和最安全的方法是将MD5与SHA1结合起来,例如:SHA1 MD5,我认为没有办法同时使用相同的MD5和SHA1获取文件(Collision).

那么将SHA1 MD5安全组合到足以用于文件校验和吗?还是有任何类似碰撞的攻击?

我以两种方式使用c#mono(Bufferstream,没有Bufferedstream)

    public static string GetChecksum(string file)
    {
        using (FileStream stream = File.OpenRead(file))
        {
            var sha = new SHA256Managed();
            byte[] checksum = sha.ComputeHash(stream);
            return BitConverter.ToString(checksum).Replace("-", String.Empty);
        }
    }

    public static string GetChecksumBuffered(Stream stream)
    {
        using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
        {
            var sha = new SHA256Managed();
            byte[] checksum = sha.ComputeHash(bufferedStream);
            return BitConverter.ToString(checksum).Replace("-", String.Empty);
        }
    }

更新1:
 我的意思是SHA1哈希MD5哈希.首先计算文件的SHA1然后计算文件的MD5然后将这两个加在一起.

更新2:

正如@ zaph所提到的,我根据我读到的here再次实现了我的代码(C#MONO),但它并没有像我说的那样快速地使我的代码!它使我的4.6 GB文件的速度从(大约)12分钟到大约8分钟,但是对于这个文件,sha1 md5花费我不到100秒.所以我仍然认为使用SHA256是不对的.

最佳答案 SHA-256与MD5 SHA1的组合之间应该只有很小的差别.

要知道的唯一方法是基准测试:

在我的桌面上:
SHA-256:200 MB / s
MD5:470 MB / s
SHA1:500 MB / s(更新,以前不正确)
MD5 SHA1 240 MB / s

这些时间仅用于散列,不包括磁盘读取时间.测试用1MB缓冲液完成,平均超过10次.语言为“C”,使用的库是Apple的Common Crypto. cpu是2.8 GHz四核Intel Xeon(2010 MacPro,我的笔记本电脑更快).

最后,使用组合MD5 SHA1的速度提高了23%.

注意:大多数英特尔处理器都有可用于加快加密操作的指令.并非所有实现都使用这些指令.

YOumight尝试本机实现,如sha256sum.

点赞