我正在制作一个有任务和解决方案的小网络游戏,解决方案是通过输入一个代码给用户后完成任务的解决方案。为了有一些安全性(防止作弊),我不想将游戏生成的代码存储在纯文本中。但是,因为我需要能够给一个球员的代码,当他已经完成的任务,我不能散列它,因为我不能检索它。
那么,使用python进行加密/解密的最安全方法是什么呢?
发布于 2009-06-26 02:01:28
如果你的脚本可以破译密码,那么别人也可以破解你的服务器。只有当有人输入密码来解锁它时,加密才是真正有用的-如果它保持解锁状态(或者脚本有解锁的密码),加密是没有意义的
这就是为什么散列更有用的原因,因为它是一个单向的过程-即使有人知道你的密码散列,他们也不知道他们必须输入的纯文本才能生成它(没有很多暴力破解)
我不会担心游戏密码是纯文本的。如果你关心的是保护它们,修复可能的SQL注入/等,确保你的web服务器和其他软件是最新的并且配置正确等等。
也许可以想出一种方法,使窃取密码的吸引力低于实际玩游戏的吸引力?例如,有一个游戏(我不记得它是什么了),如果你使用关卡跳过作弊,你进入下一个关卡,但它没有标记为“完成”,或者你可以跳过关卡,但没有得到任何分数。或者看看Project Euler,你可以做任何关卡,但只有在你输入答案的情况下才能获得分数(计算出答案是游戏的全部要点,所以作弊会破坏游戏的进行)
如果你真的是偏执狂,你可能会使用非对称加密,在这种情况下,你基本上是用key A
加密一些东西,并且你只能用key B
读取它。
我想出了一个类似的概念来使用GPG加密(流行的非对称加密系统,主要用于电子邮件加密或签名) to secure website data。我不太确定这将如何应用于保护游戏级别的密码,正如我所说的,你甚至需要真正的偏执狂才会考虑这一点。
简而言之,我会说以纯文本存储密码,并将您的安全问题集中在其他地方( web应用程序代码本身)
发布于 2009-06-25 12:59:12
最安全的加密是不加密。密码应简化为散列。这是一种单向转换,使得密码(几乎)无法恢复。
当给某人一个代码时,你可以做以下事情来确保安全。
(1)生成一些随机字符串。
(2)给他们字符串。
(3)保存您生成的字符串的哈希。
一次。
如果他们“忘记”了代码,您必须(1)确保他们被授权提供代码,然后(2)再次执行该过程(生成新代码,将其提供给他们,保存哈希)。
发布于 2009-06-25 12:58:46
如果是网页游戏,你不能把代码存储在服务器端,然后在他完成任务时发送给客户端吗?你的游戏架构是什么?
至于加密,也许可以尝试像pyDes这样的东西
https://stackoverflow.com/questions/1043735
复制相似问题