【发布时间】:2012-03-14 01:57:36
【问题描述】:
我正在尝试构建一种使用 API 密钥进行访问的身份验证机制。
作为对中继攻击的预防措施,我正在使用当前的 DateTime 对 API 密钥进行哈希处理,并在服务器端进行检查。
使用相同的代码在客户端和服务器上进行散列,我从两个调用中得到不同的结果。
IE:客户端对其 API 密钥进行哈希处理,并将哈希处理后的密钥和日期时间“salt”发送到服务器。
服务器获取预期的 api 密钥并使用客户端发送的日期时间进行哈希处理。
我的哈希永远不匹配(客户端哈希!= 服务器哈希)。
仅当我在不同的机器上运行客户端和服务器时才会发生这种情况(实际上另一个开发人员正在尝试编写客户端部分)
当我在本地机器上测试时一切正常(同时运行客户端和服务器部分并尝试身份验证)。
问题 给定相同的输入,.NET SHA256Managed 类的 ComputeHash 方法在不同的计算机上运行时会返回不同的结果吗?
【问题讨论】:
-
你能提供一个可重现的例子吗?
-
创建一个随机盐(作为字节)并将其发送到服务器。如果您需要文本,请将盐编码为十六进制字符串。
-
SHA256Managed不是线程安全的,所以如果你从不同的线程调用同一个实例,它可能会产生不同的结果
标签: c# .net hash cryptography