我正在尝试使用API密钥构建一个身份验证机制来进行访问。
作为防止中继攻击的预防措施,我使用当前的DateTime对API密钥进行哈希处理并检查服务器端。
使用相同的代码在客户端和服务器上进行哈希,我从两个调用中得到不同的结果。
I.E:客户端哈希其API密钥并将哈希密钥和日期时间“salt”发送到服务器。
服务器获取预期的api密钥,并使用客户端发送的日期时间进行哈希处理。
我的哈希从不匹配(客户端哈希!=服务器哈希)。
这只发生在我在单独的机器上运行客户端和服务器时(实际上另一个开发人员正在尝试编写客户端部分)
当我在本地计算机上测试(运行客户端和服务器部分以及尝试身份验证)时,一切正常。
问题 给定相同的输入,.NET SHA256Managed类ComputeHash方法在不同的计算机上运行时会返回不同的结果吗?
答案 0 :(得分:5)
鉴于相同的输入,.NET SHA256Managed类ComputeHash方法在不同的计算机上运行时会返回不同的结果吗?
没有。如果它确实比实现被破坏(不太可能),或者输入不同。
答案 1 :(得分:1)
如果您使用string
,请小心,因为不同计算机之间的编码,当前文化......可能会有所不同,这会给您不同的结果(因为输入在字节方面不同)。
答案 2 :(得分:1)
哈希值应始终相同。您的问题可能是因为您使用日期的字符串表示形式作为salt,并且由于区域设置,每台计算机上的字符串表示形式不同。