SHA256Managed Class 在不同机器上运行时会返回不同的结果吗?
我正在尝试使用 API 密钥构建身份验证机制进行访问。
为了预防中继攻击,我使用当前日期时间对 API 密钥进行哈希处理并在服务器端进行检查。
使用相同的代码在客户端和服务器上进行哈希处理,我从两次调用中得到不同的结果。
IE:客户端散列其 API 密钥并将散列密钥和日期时间“盐”发送到服务器。
服务器获取预期的 api 密钥并使用客户端发送的日期时间进行哈希处理。
我的哈希值永远不匹配(客户端哈希值!=服务器哈希值)。
仅当我在单独的计算机上运行客户端和服务器时才会发生这种情况(实际上另一个开发人员正在尝试编写客户端部分)
当我在本地计算机上测试时一切正常(运行客户端和服务器部分并尝试身份验证)。
问题 给定相同的输入,.NET SHA256Managed 类 ComputeHash 方法在不同计算机上运行时会返回不同的结果吗?
I am attempting to build an authentication mechanism using API keys for access.
As a precaution against relay attacks, I am hashing the API key with the current DateTime and checking on the server side.
Using the same code to hash on both the client and server, I get different results from each of the two calls.
I.E: the Client hashes its API key and sends the hashed key and the datetime "salt" to the server.
The server takes the expected api key and hashed with the datetime sent from the client.
My hashes never match(Client hash != server hash).
This only occurs when I am running the client and server on seperate machines(actually another developer is attempting to write the client portion)
Everything works fine when I test on my local machine(running both client and server portions and attempting the authentication).
Question
Given the same input, will the .NET SHA256Managed class ComputeHash method return different results when run on different computers?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不会。如果确实如此,则说明实现已损坏(不太可能),或者输入不同。
No. If it does than the implementation is broken (unlikely), or the input is different.
如果您使用
string
请小心,因为不同计算机之间的编码、当前文化...可能会有所不同,这会给您带来不同的结果(因为输入在字节方面是不同的) )。Take care if you use
string
because the encoding, current culture... might differ between different computers and that will give you different results (because the input is different byte-wise).哈希值应该始终相同。您的问题可能是因为您使用日期的字符串表示形式作为盐,并且由于区域设置,每台计算机上的字符串表示形式都不同。
The hash should always be the same. Your problem is likely because you are using the string representation of the date as the salt, and the string representation is different on each machine due to locale settings.