SHA-256散列C#和Javascript之间的不同(SHA-256 hashes differe

2019-06-24 09:17发布

我目前工作的一个项目,该项目将涉及信用卡刷卡基于数据库行招生。 就像一个会调用系统中,CC数的SHA-256散列必须哈希数据库行中,以匹配被认为是“正确的皮卡”。

然而,由于票房系统是基于浏览器,在皮卡CC号必须比以前下载将调用数据散列客户端,使用Javascript,然后。

然而试图散列数字时,哈希最终总是比DB行创建时(使用VB.NET和SQL Server 2008 R2)什么散列不同。 例如,如果在数据库中CC数正好是4444333322221111,然后从.NET所得到的散列将变得xU6sVelMEme0N8aEcCKlNl5cG25kl8Mo5pzTowExenM =。

然而,使用任何SHA-256散列库时为Javascript我能找到的,所产生的哈希将永远是NbjuSagE7lHVQzKSZG096bHtQoMLscYAXyuCXX0Wtw0 =。

我假设这是某种形式的Unicode / UTF-8的问题,但无论我怎么努力,我不能让哈希出来相同的,它开始把我疯了。 任何人都可以提供什么建议吗?

这里的东西,可能提供一些见解。 请到http://www.insidepro.com/hashes.php?lang=eng并插入“4444333322221111”不带引号到密码框。 然后,向下滚动到SHA-256节。

你可以看到有四个结果,其中两个是哈希码我张贴(第二从顶部是JavaScript的哈希值和底部的一个是SQL散列)。 根据该网页,使用碱64串,以及使密码成unicode格式生成底部散列结果。

经调查,并尝试了许多不同的功能编码密码转换成Unicode格式,但不管我什么小的调整或其他功能我做,我从来没有得到它匹配的哈希码,我需要。

我目前正在调查调用服务器端的SHA-256功能时使用的参数。

更新:

因此,只要确保我是不是疯了,我跑在调试时,我在即时窗口中使用的CC数的哈希方法。 再次,结果仍然和以前一样。 :你可以在这里看到的截图http://i.imgur.com/raEyX.png

Answer 1:

据网上SHA-256散列运算单元和一个基于64位十六进制解码器 ,它是没有正确计算哈希的.NET实现。 您可能要仔细检查你传递给散列函数的参数。

当你处理两个不可信的实现,它始终是一个好主意,找到另一个独立实施,并选择相匹配的第三个为正确的人。 如果不是这样,或者找一些测试向量 ,并单独验证的实现。


编辑:

快速实验表明,SHA-256散列你从.NET获得hext字符串匹配3400340034003400330033003300330032003200320032003100310031003100 -小尾数16位字符。 确保在ASCII通过。



Answer 2:

亚当·利斯说得对,当他提到在.NET / SQL服务器字符串之间的字节数组比在Javascript中的字符串不同。 的字符串4444333322221111 .NET中的数组看起来像[52 0 52 0 0 52 0 52 0 51 0 51 ...等]在Javascript同样的事情也只是看起来像[52 52 52 52 51 51 51 51 ...]。 因此,具有不同的字节数组,产生不同的散列。

我能够通过修改从基地64 SHA-256散列算法来解决这个问题我的应用程序在这里 ,每个字符从字符串一次一个,以生成散列拉。

而不是它做这种方式,我首先转化串入一个unicode状字节阵列(像上面的.NET例如,52 0 52 0等),供给该阵列的散列算法,而不是字符串,并没有一些非常小的调整,以便它抓住每个阵列构件,以产生哈希值。 低你看,它的工作,现在我也以同样的方式为快速方便的查找顺序在.NET框架散列CC数的非常方便的方法。



Answer 3:

你确定你的JavaScript函数SHA256?


而你首先生成的哈希?

SHA-256("4444333322221111"); // 35b8ee49a804ee51d5433292646d3de9b1ed42830bb1c6005f2b825d7d16b70d

hex: 35b8ee49a804ee51d5433292646d3de9b1ed42830bb1c6005f2b825d7d16b70d
HEX: 35B8EE49A804EE51D5433292646D3DE9B1ED42830BB1C6005F2B825D7D16B70D
h:e:x: 35:b8:ee:49:a8:04:ee:51:d5:43:32:92:64:6d:3d:e9:b1:ed:42:83:0b:b1:c6:00:5f:2b:82:5d:7d:16:b7:0d
base64: NbjuSagE7lHVQzKSZG096bHtQoMLscYAXyuCXX0Wtw0=


文章来源: SHA-256 hashes different between C# and Javascript