0

我正在组织一场编程比赛。我需要创建一个程序来逐个字符地检查另一个程序(参与者的可执行文件)的输出。要求是:

  • 程序必须是platform independent.
  • 参与者不能获得输入和正确的输出。参与者所做的只是将他的程序名称传递给检查器。检查器告诉答案是否正确,就是这样。
  • 参与者程序的输出不得显示给参与者本人 - 否则他可能会据此计算输入。

对于第二部分,是否可以以某种方式将输入和输出存储在可执行文件本身中?我宁愿不从加密文件中读取..这让事情有点不方便..

该程序应该像这样工作:

checker.exe question1.exe

正确答案,恭喜!

请把这个给志愿者看。

我尝试使用标准 C 库中的popenpclose函数。

但问题是,在 Linux 中,它会打开一个 shell,显示参与者程序的输出,根据第三个要求,这不应该发生。

有什么简单的方法可以做到这一点?提前致谢。

编辑

我需要将针对每个问题制作的可执行文件专门交给参与者。

4

2 回答 2

0

一种选择是要求用户使用您提供的公钥加密他们程序的输出:gnupg 可能是一个不错的选择。使用您的私钥解密输出并进行比较。

否则,不清楚如何在不将程序输出存储到某个文件(二进制或文本)以及不损害数据隐私的情况下进行比较。

于 2013-03-07T05:15:30.013 回答
0

是的,永远不要将信息存储在外壳中很容易......只需使用管道。

例如

  $ question | checker

Checker 可以打印它是否有效。这一切都发生在记忆中。


如果您希望用户能够自己执行此操作,只需将此代码放在脚本文件中,设置文件以便用户只能执行和读取 priv。然后将脚本设置为以 su 运行。然后脚本可以进行检查(即运行检查器 - 或进行比较)。如果需要比较,则数据文件可以在脚本外部,并且用户没有对该文件的权限,则他们无法读取数据。

于 2013-03-07T05:18:14.840 回答