繁体   English   中英

SHA-256哈希值在C#和Javascript之间有所不同

[英]SHA-256 hashes different between C# and Javascript

我目前正在开发一个项目,该项目将涉及基于数据库行的入学信用卡刷卡。 与遗嘱呼叫系统一样,CC号的SHA-256哈希必须与DB行中的哈希匹配才能被视为“正确的提取”。

但是,由于票房系统是基于浏览器的,因此必须使用Javascript对客户端进行散列的CC号码,然后与先前下载的将调用数据进行比较。

但是,在尝试对数字进行散列时,散列总是与创建数据库行时使用的散列不同(使用VB.NET和SQL Server 2008 R2)。 例如,如果数据库中的CC编号恰好是4444333322221111 ,则.NET生成的哈希值将变为xU6sVelMEme0N8aEcCKlNl5cG25kl8Mo5pzTowExenM =

但是,当我找到Javascript使用任何SHA-256哈希库时,产生的哈希将始终为NbjuSagE7lHVQzKSZG096bHtQoMLscYAXyuCXX0Wtw0 =

我假设这是某种Unicode / UTF-8问题,但无论我尝试什么,我都无法得到相同的哈希,它开始让我发疯。 有人可以提供任何建议吗?

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

您可以看到有四个结果,其中两个是我发布的哈希码(第二个从顶部是Javascript哈希,最下面一个是SQL哈希)。 根据该页面,底部哈希结果使用base 64字符串生成,并将密码设置为unicode格式。

我已经对此进行了调查,并尝试了许多不同的函数来将密码编码为unicode格式,但无论我尝试什么小调整或我做的其他函数,我都无法得到它来匹配我需要的哈希码。

我目前正在研究在服务器端调用SHA-256函数时使用的参数。

更新:

所以为了确保我没有疯狂,我在调试时运行了我用于立即窗口中CC编号的Hash方法。 同样,结果与以前一样。 你可以在这里看到截图: http//i.imgur.com/raEyX.png

根据在线SHA-256哈希计算器base-64到hex解码器 ,它是.NET实现没有正确计算哈希。 您可能需要仔细检查传递给散列函数的参数。

当您处理两个不受信任的实现时,最好找到另一个独立的实现,并选择与第三个匹配的实现正确。 要么是这样,要么找到一些测试向量 ,并单独验证实现。


编辑:

一个快速实验表明,从.NET获得的SHA-256哈希与hext字符串3400340034003400330033003300330032003200320032003100310031003100匹配 - 小端16位字符。 确保传入ASCII。

Adam Liss在提到.NET / SQL Server中字符串之间的字节数组与Javascript中的字符串不同时说得对。 用于字符串4444333322221111的 .NET中的数组看起来像[52 0 52 0 52 0 52 0 51 0 51 0 ...等],Javascript中的相同内容看起来就像[52 52 52 52 51 51 51 51 ...]。 因此,对于不同的字节数组,生成了不同的散列。

通过从此处修改基本64 SHA-256哈希算法,我能够为我的应用程序解决这个问题 ,其中每次从字符串中提取一个字符以生成哈希。

我没有这样做,而是首先将字符串转换为类似unicode的字节数组(如上面的.NET示例,52 0 52 0等),将该数组转换为散列算法而不是字符串,并且一些非常小的调整,以便它抓住每个数组成员生成哈希。 低,看,它工作,现在我有一个非常方便的方法,以与.NET框架相同的方式散列CC数字,以便快速轻松地查找订单。

您确定您的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=

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM