如何转换为ComputeHash返回的文件字节

时间:2010-04-20 06:04:29

标签: c# streaming

输出始终为1kb文件。如何成功地将ComputeHash返回的字节转换为文件。?

MD5CryptoServiceProvider test = new MD5CryptoServiceProvider();

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

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

3 个答案:

答案 0 :(得分:0)

结果始终相同,因为MD5 hash的长度始终相同。同样给出一个哈希你不能获得原始值(你总是可以尝试破解它),这就是哈希的目的。

答案 1 :(得分:0)

我假设你的意思是:我有一个1kb文件,如何从1kb文件转到新文件?

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

如果你想象一下,让我们说一个长度为100个字符的字符串被赋予一个返回char [32]的哈希函数...你的输入有255 ^ 100种不同的可能性,而你的返回值有255 ^ 32回归的可能性。显然会发生碰撞[输入数量>输出数量

答案 2 :(得分:0)

我不确定我完全理解你在寻找什么,但可能是这个吗?

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