我已经对这些问题进行了大量研究,但似乎仍无法找到我正在寻找的东西。基本上我已经为WP7创建了一个游戏,我想让它连接到我创建的服务,以发送高分并获得排行榜。现在服务很简单,只需要一个玩家姓名和得分的字符串格式。
我已经看过很多关于如何加密和解密数据的教程,但它们似乎都基于用户信息生成密钥,通常只是本地示例。我不是必须使用我用来加密应用程序端数据的相同密钥,以便我可以在服务器端解密它吗?我是否在应用程序和服务器上创建自己的密钥?我如何保护该密钥?
我一直在搞乱这种方法将加密字符串发送到我的服务: http://robtiffany.com/windows-phone-7/dont-forget-to-encrypt-your-windows-phone-7-data/
但由于密钥生成,我真的很困惑如何在应用程序端和服务器端同步该进程。
如果有人创建了高分服务并且提供了一些非常有用的提示。
答案 0 :(得分:2)
如果你想让这个非常安全(可能不需要),那么情况就很棘手 - 你必须假设玩家可以访问你的应用程序的源代码(因为他/她可以反编译)并且还可以访问存储在应用程序中或手机中任何位置的所有密钥。这意味着,如果您的应用程序使用手机上存储的密钥加密分数,则攻击者可以使用假分数执行相同操作。
为了使其真正安全,您可能需要将一些游戏日志发送到服务器,并且服务器必须验证日志是否是完成游戏的合理方式(即游戏可能已经播放以这种方式)。为了在这个系统中伪造一个分数,攻击者必须生成一个游戏日志 - 这意味着创建一个可以比人类更好地玩游戏的AI(以获得更好的分数)。这可能仍然是可能的(如果游戏对于计算机来说很容易),但我想不太可能有人会打扰。
在实践中,我认为你可以在分数编码的方式上添加一些模糊处理(例如,在服务器和客户端上使用相同的密钥进行对称加密)。如果somone查看通过网络发送的数据,他们将无法轻易伪造更好的分数。如果他们反编译应用程序,那么他们可能仍然会这样做,但它可能不太可能(并且你可以手动检查分数,看看是否有可疑的东西)。
[编辑:我不是WP7的专家,所以WP7可能会提供一些特别的东西,但原则上它仍会有同样的问题]
答案 1 :(得分:0)
您可以尝试使用客户端证书来加密数据。 This是试图完成同样事情的人的一个不错的主题。