【发布时间】:2020-04-06 01:58:18
【问题描述】:
这是我在这里的第一篇文章,希望有人能给我一些帮助!
我目前正在为一个大学项目开发 Capture The Flag (CTF),作为其中的一部分,我想参与一个 Python 测验;验证用户的答案是否正确。
虽然我编写了一个相当简单的脚本来完成工作,但我想到的一个潜在问题是用户可以简单地在 gedit 或 nano 中打开 Python 脚本并轻松找到答案。我尝试了一些解决方案,但我想不出任何可靠的方法。
正如我所说,代码本身相当简单,但我想我将其包含在内只是为了让您了解我目前所掌握的内容:
import sys
answer = ("Blessed be our saviour, a warrior...")
userInput = input("What does the decrypted text read? ")
if userInput == answer:
print("Correct, the way is open")
else:
print("Incorrect! The way is barred until you find the solution!")
sys.exit(0)
我真的不知道这是否可能,但我想我不妨问问。
感谢您提供的任何建议!
【问题讨论】:
-
您可以加密用户提供的字符串,然后将其与加密的答案字符串进行比较。
-
您可以使用一些简单的加密方法对答案进行编码,例如 f.i. Vigenere 密码字符串编码,或以某种数据格式将其存储在磁盘上。
-
如果您希望明文答案不能从文件中的数据导出,请使用加密哈希算法。 docs.python.org/3/library/hashlib.html 但是,如果您的用户可以在编辑器中打开文件,那么是什么阻止他们更改检查答案是否正确的条件?
-
我觉得加密是不够的,因为他们可以看到加密方式,然后反过来。您可以将答案存储为散列(参见例如 this site )并简单地存储答案散列,并将用户输入与散列值进行比较。任何超越这种事情的人都应该得到满分甚至更多。至于编辑脚本以使答案正确,您始终可以分发
.pyc文件。虽然扭转这一点并不难,但我认为在这种情况下,这比人们关心的要付出更多的努力 -
防止逆向工程的唯一可靠方法是不分发代码(以纯文本或编译形式)。 IOW,让它成为一个网络应用程序;-)