什么是最安全的 Python "密码" 加密方式?

5
我正在制作一个小型网络游戏,其中包含任务和解决方案,解决方案是通过输入完成任务后向用户提供的代码来解决的。为了保证一定的安全性(防止作弊),我不想以明文形式存储游戏生成的代码。但由于需要在玩家完成任务后给出代码,所以我不能对其进行哈希处理,否则就无法检索到它。
那么,使用Python加密/解密数据的最安全方式是什么?

请查看此处:https://dev59.com/eHVC5IYBdhLWcg3w1Exq - z -
2
如果您将这些代码存储为纯文本,那么您如何能够作弊? - innaM
以防万一有人拿到了带有代码的数据库表... - espenhogbakk
那不是作弊,而是黑客行为。 - innaM
4个回答

5
最安全的加密是没有加密。密码应该被转化为哈希值。这是一种单向转换,使密码(几乎)无法恢复。
当给某人一个代码时,您可以采取以下措施来确保实际安全。
(1) 生成一些随机字符串。
(2) 将字符串提供给他们。
(3) 保存您生成的字符串的哈希值。
只需执行一次。
如果他们“忘记”了代码,您必须 (1) 确定他们有资格获得代码,然后 (2) 再次执行此过程(生成新代码,将其提供给他们,保存哈希值)。

就像问题所说,哈希是不好的,因为他必须能够告诉玩家密码。 - Adrian Mester
2
@Adrian:说得好。然而,我认为问题有缺陷。或者,这不是真正的安全,那么加密其实并没有什么帮助。 - S.Lott
有另一篇帖子,但已被删除,我认为这是一个相当不错的想法:生成字符串的哈希值,格式为username+"mygame"+level(也许还可以添加盐以提高安全性?)我不知道是谁发布并随后删除了它,但我认为这是一个不错的方法。 - Adrian Mester
@Adrian:我不认为告诉密码有什么问题。如果用户要求更改密码,删除旧密码,创建新密码并进行哈希处理即可... - Bite code

5
如果您的脚本可以解密密码,那么入侵者也可以。加密只有在有人输入密码进行解锁时才真正有用——如果它保持解锁状态(或者脚本有密码解锁它),那么加密就毫无意义了。
这就是为什么哈希更有用,因为它是一个单向过程——即使有人知道您的密码哈希值,他们也不知道必须输入什么明文才能生成它(除非进行大量暴力破解)。
我不会担心保留游戏密码的明文。如果您担心安全问题,请修复可能存在的SQL注入等漏洞,确保您的Web服务器和其他软件已经更新并正确配置等。
也许考虑一种方式,使得盗取密码变得不如实际玩游戏有吸引力?例如,有一个游戏(我不记得是哪个)使用级别跳过作弊,你可以进入下一级别,但它不会标记为“完成”,或者你可以跳过级别,但不会得到任何分数。或者看看Project Euler,你可以做任何级别,但只有在输入答案后才能得到分数(而计算答案才是游戏的全部意义,所以作弊会破坏游戏的乐趣)。
如果您真的很偏执,可以可能使用非对称加密,其中您基本上使用key A加密某些内容,只有使用key B才能读取它。
我想出了一个类似的概念,使用GPG加密(流行的非对称加密系统,主要用于电子邮件加密或签名)来保护网站数据。我不太确定这如何适用于保护游戏级别密码,正如我所说,您需要非常偏执才会考虑这个。
简而言之,我建议以明文存储密码,并将安全问题集中在其他地方(Web应用程序代码本身)。

我在很大程度上同意你的观点,这也是我最终可能会采取的做法。我也认为,如果我让 SQL 注入等操作变得“不可能”,那么将密码以明文形式存储应该没有问题,因为没有人能够获取它们。但是,如果他们真的获取到了密码,他们就可以毫无问题地通过游戏并成为赢家...所以,为了保险起见,我考虑加密一下也无妨。 - espenhogbakk
GPG加密解决方案似乎有点偏执狂 :) - espenhogbakk

2
如果是网页游戏,你不能将代码存储在服务器端,并在客户端完成任务时发送给他吗?你的游戏架构是什么?
至于加密,也许可以尝试类似 pyDes 的东西?

0

您的问题不太清楚。您希望在哪里进行解密?无论如何,明文必须出现,因为您最终需要让玩家知道它。

选择一个密码并完成它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接