重新编写后的不同哈希

时间:2016-01-06 01:00:34

标签: c# hash md5 tcpclient


我的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都应该不同的是,这个问题只发生在重新安装之后。

0 个答案:

没有答案