加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#String.getHashCode()为不同的字符串返回相同的值[复制]

发布时间:2020-12-16 10:35:36 所属栏目:百科 来源:网络整理
导读:参见英文答案 string.GetHashCode() returns different values in debug vs release,how do I avoid this?????????????????????????????????????3个 ???????????? Calculate MD5 checksum for a file????????????????????????????????????6个 我的应用程序作
参见英文答案 > string.GetHashCode() returns different values in debug vs release,how do I avoid this?????????????????????????????????????3个
>???????????? Calculate MD5 checksum for a file????????????????????????????????????6个
我的应用程序作为Windows服务运行,我将VS2013附加到它的调试过程.我正在获取图像文件内容的哈希码,以检查以下方法的差异(在静态类中):

static class FileUtils
{
    public static int GetFileHash(string filePath)
    {
        int hash = 0;
        Logger.WriteLog(ToolTipIcon.Info,"Calculating hash code for {0}",filePath);
        StreamReader sr = new StreamReader(filePath,Encoding.Unicode);
        hash = sr.ReadToEnd().GetHashCode();
        sr.Close();
        return hash;
    }
}

这在生产中一直很好.但是,对于两个不同的图像,此方法将始终返回2074746262.我试图在winforms应用程序中使用相同的代码和图像重现这一点,我不能.是否存在调试VS2013中的进程会导致此行为的问题?我用一个完全不同的图像替换了其中一个图像,但它仍然会发生.

解决方法

首先,您应该知道您正在错误地使用GetHashCode,原因有两个:

>哈希码不是唯一的,只有非常好的分布.存在有限数量的哈希码和无限数量的二进制字符串,因此在物理上不可能为每个字符串生成唯一的哈希码.
>哈希代码算法的详细信息明确没有记录,并且会因为与您无关的原因而更改.特别是,这不是我第一次看到它报告string.GetHashCode()在调试器下运行时改变了行为:

string.GetHashCode() returns different values in debug vs release,how do I avoid this?

话虽如此,三个不同的二进制字符串在相同的运行时环境中以不同的方式散列,这取决于是否附加了调试器,这似乎有点不同寻常.除了一般不信任GetHashCode之外,我的下一个猜测是你没有哈希你认为你正在哈希的东西.我会在对其进行散列之前将二进制数据本身转储到磁盘,并确认您确实拥有不同的二进制字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读