【发布时间】:2014-10-07 01:30:38
【问题描述】:
我有一个 aspx 应用程序,我在其中生成一个散列以将其发送到银行,以便进行货币交易。我遇到了一个非常奇怪的问题:当我在 Visual Studio 2010 的开发服务器中本地运行应用程序时,哈希计算正确,但在生产服务器中已发布的应用程序中,哈希不再正确计算,它没有'不抛出任何错误,但生成的散列不正确(说不正确并不意味着它不是散列,而是不是预期的散列)
返回哈希的函数如下:
string codificar = afiliacion.ToString().Trim() +
tienda.ToString().Trim() +
terminal.Trim() +
total_orden.ToString().Trim() +
moneda.ToString().Trim() +
numOrd.ToString().Trim();
SHA1 cod = new SHA1Managed();
UTF8Encoding codificado = new UTF8Encoding();
byte[] stream = codificado.GetBytes(codificar);
StringBuilder sb = new StringBuilder();
var hash = cod.ComputeHash(stream);
foreach (var b in hash)
{
sb.Append(b.ToString("X2"));
}
foreach (var laorden in categoriaBuscados)
{
TNumsOrdenAFoliosMovimiento registro = new TNumsOrdenAFoliosMovimiento();
registro.numOrden = laorden.NumOrden;
registro.Digest = sb.ToString().ToLower();
try
{
modelo.TNumsOrdenAFoliosMovimiento.AddObject(registro);
modelo.SaveChanges();
}
catch (Exception el)
{
Response.Write(el.Message);
}
非常欢迎任何建议,因为我不知道为什么会发生这种情况。我的意思是,相同的代码在本地版本和发布版本之间的工作方式不同,理论上是不可能的,不是吗?
【问题讨论】:
-
您能否详细说明您确定它不是正确哈希的方式?
-
举一个字符串
codificar的例子和你期望得到的哈希值。 -
32 位 vs 64 位是这里最可能的原因之一。
-
@MarkNash 这不一样。
GetHashCode()此处未使用。 -
ToString可以根据机器的语言环境产生不同的表示。它们在本地机器和生产机器上是否相同?