我正在制作一个有任务和解决方案的小网页游戏,通过输入完成任务后提供给用户的代码来解决解决方案。为了获得一些安全性(反对作弊),我不想以纯文本形式存储游戏所产生的代码。但是因为当我完成任务时我需要能够给玩家代码我不能哈希它从那以后我就无法重复它。
那么使用python加密/解密某些东西最安全的方法是什么?
答案 0 :(得分:5)
最安全的加密是不加密的。密码应缩减为哈希值。这是一种单向转换,使密码(几乎)无法恢复。
在向某人提供代码时,您可以执行以下操作以实际安全。
(1)生成一些随机字符串。
(2)给他们字符串。
(3)保存你生成的字符串的哈希值。
在
如果他们“忘记”代码,你必须(1)确保他们被授权给出代码,然后(2)再次执行该过程(生成新代码,给他们,保存哈希值。)
答案 1 :(得分:5)
如果您的脚本可以解码密码,那么有人可以闯入您的服务器。当有人输入密码解锁时加密才真正有用 - 如果它仍然未锁定(或者脚本有解密密码),加密是没有意义的
这就是为什么散列更有用,因为它是一个单向过程 - 即使有人知道你的密码哈希,他们也不知道他们必须输入的纯文本来生成它(没有大量的暴力)
我不担心将游戏密码保持为纯文本。如果您担心保护它们,请修复可能的SQL注入/等,确保您的Web服务器和其他软件是最新的并且配置正确等等。
或许想到一种方法可以减少窃取密码的吸引力而不是实际玩游戏?例如,有一个游戏(我不记得它是什么),如果你使用了跳级作弊,你进入了下一个级别,但它没有将其标记为“完整”,或者你可以跳过这个级别但没有得到任何积分。或者看看项目欧拉,你可以做任何级别,但是如果你输入答案你只能获得分数(并且确定答案是整个游戏点,所以作弊会打败游戏)
如果你真的很偏执,你可以可能使用非对称加密,你基本上使用key A
加密某些东西,你只能用key B
来读取它。 / p>
我想出了一个类似的使用GPG加密的概念(流行的非对称加密系统,主要用于电子邮件加密或签名)to secure website data。我不太确定这将如何适用于保护游戏级密码,正如我所说,你甚至需要非常偏执才能考虑这个......
简而言之,我会说以纯文本形式存储密码,并将您的安全问题集中在其他地方(Web应用程序代码本身)
答案 2 :(得分:2)
如果是网页游戏,你不能存储代码服务器端并在完成任务时将它们发送给客户端吗?你的游戏架构是什么?
至于加密,可以尝试类似pyDes的内容吗?
答案 3 :(得分:0)
你的问题不太清楚。你想在哪里解密?无论如何,明文必须浮出水面,因为你需要玩家最终知道它。
选择一个cipher并完成它。