2013-05-14 92 views
2

不同我有像这样的MD5哈希方法:MD5哈希在本地机器上

MD5 md5 = System.Security.Cryptography.MD5.Create(); 
     StringBuilder sb = new StringBuilder(); 
     lock (md5) 
     { 
      byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); 
      byte[] hash = md5.ComputeHash(inputBytes); 

      for (int i = 0; i < hash.Length; i++) 
      { 
       sb.Append(hash[i].ToString("X2").ToString(CultureInfo.InvariantCulture)); 
      } 
     } 
     return sb.ToString(); 

在使用相同的输入几个本地开发机器上,这将返回相同的哈希值。在升级和在线服务器上,它正在返回预期值。

但是,在一些本地开发机器上,值有所不同。我不明白为什么?

我添加了lockCultureInfo以回应这里的一些其他答案..但唉。没有。

任何和所有的帮助,非常感谢在这件事上!

UPDATE:

我已经得到的地方,我比较了“好”的inputBytes阵列与一个“坏”的机器和阵列是相同的点。

那么ComputeHash方法在计算机之间可以做什么呢?我觉得这不是潜在的问题..但在这一点上,哈希返回不同的地方。我很茫然。

+8

你是否100%确定你的输入是相同的?我知道这是一个烦人的问题,但这将是我检查是否有这个问题的第一件事 – 2013-05-14 15:11:18

+0

同意@Bartdude。也可能是大/小端? OS差异?病毒扫描器修改?从“坏机器”中取出文件并将其复制回其中一台匹配的机器。走着瞧吧。 – 2013-05-14 15:13:22

+0

像@Bartdude一样,我也对输入产生怀疑。仔细检查所有机器上的输入始终具有相同的编码等等。如果输入不匹配,则方法本身是不是文化不变是无关紧要的。 – Smallhacker 2013-05-14 15:13:32

回答

1

正如@bartdude所说,由于从不同系统时间格式拉出的日期时间变量,在任一机器上的输入都是不同的。

希望这可以帮助未来的人。