输出始终为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);
}
答案 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。