【问题标题】:Checking JSON file integrity检查 JSON 文件完整性
【发布时间】:2015-06-03 03:53:02
【问题描述】:
  • 我正在开发一个基于服务器的游戏,我正在通过 JSON 将我的游戏数据从服务器发送到客户端。
  • 为了尽量减少带宽使用,我将游戏数据 JSON 缓存在客户端计算机上,这样他们就不需要每次都从服务器下载 JSON。
  • 我需要知道缓存在客户端的 JSON 是否与服务器上的相同(当我们在服务器上进行更改或用户访问并调整客户端的缓存时,它可能会变得不同) .

所以基本上我需要某种散列技术来获取 JSON 字符串唯一的键,我可以检查客户端上缓存的 JSON 是否与服务器上存储的相同。服务器将首先将该哈希发送给客户端,并且只有当它与客户端缓存生成的哈希不同时,客户端才会再次向服务器请求整个 JSON。

  • 我不关心数据丢失,因为哈希永远不会再转换回字符串。
  • 我不关心由于 JSON 中的不同键顺序而导致的哈希差异,因为我确保当我从服务器获取 JSON 时它们始终处于正确的顺序。
  • 哈希不应该是特定于环境的。无论环境、32 位还是 64 位以及字节序如何,相同的算法都应该生成相同的哈希。

【问题讨论】:

标签: c# json caching hash unity3d


【解决方案1】:

如果您正在寻找一个简单的散列,为什么不直接使用 MD5 散列呢? https://msdn.microsoft.com/en-us/library/system.security.cryptography.md5%28v=vs.110%29.aspx 易于实现和使用的基本哈希。

如果您希望使用 JS 在客户端上进行 MD5 哈希,您可能需要查看 https://github.com/blueimp/JavaScript-MD5(未经我测试,但我听说过好消息 :)

【讨论】:

  • 是的,MD5 是迄今为止我发现的最好的东西。我唯一遇到的问题是在服务器端实现它,以便每次对服务器上的 JSON 进行更改时都会生成一个新的哈希。对我来说最好的解决方案是一个足够简单的算法(并且不需要任何库)在服务器和客户端上实现
【解决方案2】:
  1. 正如 Brad 所提到的,.NET 中的任何内置散列技术都应该为您完成这项工作。
  2. 另一个选项是使用基于 UTC 的时间戳。 (LastModified) 服务端可以向下发送这个值,如果客户端有相同的值,那么就可以使用了。并且无论谁更新文件,都可以更新时间戳。

【讨论】:

  • 我想过这个,但问题是用户仍然可以在不修改时间戳的情况下调整缓存值。由于时间戳还是和服务器上的一样,所以不会再次拉取JSON
  • 您能解释一下“调整缓存值”是什么意思吗?我认为如果有人修改了文件,应该重新生成/更新哈希或时间戳。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2014-11-12
相关资源
最近更新 更多