【问题标题】:how to convert to file Byte returned by ComputeHash如何转换为ComputeHash返回的文件字节
【发布时间】:2010-04-20 06:04:28
【问题描述】:

输出总是一个 1kb 的文件。如何成功将ComputeHash返回的字节写入文件。?

MD5CryptoServiceProvider 测试 = 新的 MD5CryptoServiceProvider();

            using (FileStream fs = new FileStream(@"D:\test.pdf", FileMode.Open, FileAccess.Read))
            {

                byte[] buffer = test.ComputeHash(fs);
                File.WriteAllBytes(@"D:\test3.pdf", buffer);
            }

【问题讨论】:

    标签: c# streaming


    【解决方案1】:

    结果始终相同,因为MD5 hash 始终具有相同的长度。还给定一个散列,你无法得到原始值(你总是可以尝试破解它),这就是散列的目的。

    【讨论】:

    • 感谢您的所有回复。我想使用 ComputeHash 的原因是流式传输大文件。在我谷歌之后,他们说 computeHash 最适合流式传输大文件,获取字节并使用字节写入文件。但我不知道如何实现它。你能进一步帮我解决我的问题吗?谢谢
    【解决方案2】:

    我假设你的意思是:我有一个 1kb 的文件,我怎样才能从那个 1kb 的文件转到一个新文件?

    哈希是不可逆的。最接近“反转”散列的方法是查看彩虹表。

    如果您想像的话,假设将长度为 100 个字符的字符串提供给返回 char[32] 的哈希函数...您的输入有 255^100 种不同的可能性,而您的返回值有 255^32回归的可能性。显然会发生冲突 [# of inputs > # of outputs]

    【讨论】:

      【解决方案3】:

      我不确定我是否完全理解您在寻找什么,但会是这个吗?

      using(MD5CryptoServiceProvider test = new MD5CryptoServiceProvider())
      {
      
          byte[] buffer = test.ComputeHash(File.ReadAllBytes(@"D:\test3.pdf"));
          File.WriteAllBytes(@"D:\test3.dat", buffer); // PDF would be pointless here
      }
      

      但请记住,散列是不可逆的,您不能从中得到任何缺少字节流的东西。如果您希望能够逆转安全行为,请考虑使用encryption

      【讨论】:

        猜你喜欢
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        • 1970-01-01
        • 2014-02-21
        • 2015-02-17
        • 1970-01-01
        • 2011-11-16
        相关资源
        最近更新 更多