我目前正在开展一个项目,该项目将涉及基于数据库行的信用卡刷卡录取。与遗嘱呼叫系统一样,CC 编号的 SHA-256 哈希必须与 DB 行中的哈希匹配,才能被视为“正确的取货”。
但是,由于票房系统是基于浏览器的,所以取货时的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 哈希)。根据该页面,底部哈希结果是使用 base 64 字符串生成的,并将密码转换为 unicode 格式。
我已经对此进行了调查,并尝试了许多不同的函数将密码编码为 unicode 格式,但无论我尝试进行什么小调整或进行其他功能,我都无法让它与我需要的哈希码相匹配。
我目前正在研究在服务器端调用 SHA-256 函数时使用的参数。
更新:
因此,为了确保我没有发疯,我在调试时在即时窗口中运行了用于 CC 编号的 Hash 方法。同样,结果与以前相同。你可以在这里看到截图:http: //i.imgur.com/raEyX.png