我的C#应用程序有一个非常奇怪的问题。基本上,我正在创建客户端< - >服务器应用程序发送PDF文件。我想添加MD5校验和安全性以防止不必要的重新传输。这是我的MD5 hasher:
public static class CardFingerprint
{
static MD5 md5;
static CardFingerprint()
{
md5 = MD5.Create();
}
public static string computeFingerprint(string pathToFile)
{
byte[] hash = null;
using (var stream = File.OpenRead(pathToFile))
{
hash = md5.ComputeHash(stream);
}
return BitConverter.ToString(hash).Replace("-", String.Empty);
}
}
这里是文件接收的代码,基本上是它的tcpClient字节传输:
FileReceiverStatus status = fileReceiver.recieveFile(packetsToRecieve);
string fingerPrint = CardFingerprint.computeFingerprint(status.DownloadedFile);
一切正常,当我登录系统并发送文件两次时,我会得到:
[ 06.01.2016 - 01:46:52 ] >> User: DELL-IKAROS sending file.
[ 06.01.2016 - 01:46:53 ] >> DELL-IKAROS: File Card_06012016_014653_9c93.pdf downloaded.
[ 06.01.2016 - 01:46:53 ] >> hash: 810E10B2770D2C3F89F89CAD9515567C
[ 06.01.2016 - 01:46:57 ] >> User: DELL-IKAROS sending file.
[ 06.01.2016 - 01:46:58 ] >> DELL-IKAROS: File Card_06012016_014658_fb78.pdf downloaded.
[ 06.01.2016 - 01:46:58 ] >> hash: 810E10B2770D2C3F89F89CAD9515567C
[ 06.01.2016 - 01:46:58 ] >> DELL-IKAROS: FILE DUPLICATION - CONTROLL SUM: 810E10B2770D2C3F89F89CAD9515567C
BUT !!当我注销并再次登录,并发送与之前相同的文件时,我得到:
[ 06.01.2016 - 01:47:13 ] >> User: DELL-IKAROS log out.
[ 06.01.2016 - 01:47:16 ] >> User: DELL-IKAROS log in.
[ 06.01.2016 - 01:47:23 ] >> User: DELL-IKAROS sending file.
[ 06.01.2016 - 01:47:23 ] >> DELL-IKAROS: File Card_06012016_014723_7b15.pdf downloaded.
[ 06.01.2016 - 01:47:23 ] >> hash: B9C755B78472B71DD9D230C94CEF8FA6
发生什么事了? 有什么线索可能是错的?下载的文件具有相同的字节数,除了文件名之外不应该有任何区别......似乎有轻微的区别,但我不知道为什么以及在哪里,如果在tcpClient下载器中存在问题,则所有md5都应该不同的是,这个问题只发生在重新安装之后。