#P2174. Decoding Task

Decoding Task

题目

题目描述在不久的将来,全世界范围内所有关于密码学的研究和出版物都因国家安全问题被列为非法。各国政府对此的理由清晰且普遍接受 —— 如果密码学文献像过去一样公开,那么所有人(甚至罪犯和恐怖分子)都能轻易利用其隐藏针对国家和国际安全部队的恶意计划。因此,公开的密码算法和系统已不复存在,任何需要对秘密进行强保护的人都被迫发明专有算法。 ACM 公司有许多渴望窃取其商业机密的竞争对手。此外,他们不得不使用容易被窃听的洲际通信线路(不同于 ACM 公司内部严密保护的线路),这使得保护秘密的工作更加复杂。为此,ACM 公司发明了引以为傲的洲际密码保护码(ICPC),并认为其牢不可破 —— 至今无人尝试破解,但这种情况即将改变。 一个黑客组织受某匿名竞争对手雇佣,试图破解 ICPC。第一步,他们贿赂了一名参与 ICPC 软件实现的程序员,并得知了 ICPC 的工作原理。原来,ICPC 使用由复杂随机物理过程生成的长密钥(字节序列),该密钥每周更换一次,用于加密当周通过洲际线路发送的所有消息。该程序员还自豪地透露,ICPC 是世界上最快的加密方式,因为(借助高度复杂的代码生成技术)它只需对消息字节和密钥字节执行按位异或(XOR)操作。即,加密消息的第 i 字节 Ei=KiCiE_i = K_i \oplus C_i,其中 KiK_i 是密钥的第 ii 字节,CiC_i 是原始明文消息的第 ii 字节。 在了解 ICPC 的工作原理后,黑客们开始寻找每周获取密钥的可靠方法(这是监听 ACM 公司所有洲际通信的唯一缺失环节)。他们试图贿赂负责保管和分发密钥的安全官员,但未能成功 —— 这些安全官员的薪资是当时最高的职业之一,贿赂成本过高。 在寻找替代方案时,黑客们发现一名每周向各部门员工发送时事通讯的文员。幸运的是,这些时事通讯恰好在密钥更换后发送,且消息通常足够长,可通过研究原始通讯及其加密形式恢复足够的密钥片段。然而,他们无法秘密找到愿意每周泄露通讯内容的人 —— 所有员工都受保密协议(NDA)约束,违反协议泄露任何企业消息将被处以死刑。 不过,黑客们说服了该文员(只需小额报酬)完成一件看似无害的事:在向公司内部发送通讯副本时,他被指示在某些消息开头插入一个额外的空格字符,而其他副本则按原始形式发送。现在,恢复密钥的任务变得直接,而你需要为此编写一个程序。 程序的输入是两条 ICPC 加密后的消息:第一条消息长度为 N 字节,第二条为 N+1 字节。两条消息对应的明文内容相同,但第二条消息的明文在开头多了一个空格字符(字节的十进制值为 32)。程序需找出用于加密消息的前 N+1 字节密钥。输入格式输入包含两行。第一行包含 2N 个字符,表示长度为 N 字节的加密消息,每个字节以两位十六进制字符表示(无空格)。第二行包含 2N+2 个字符,表示长度为 N+1 字节的加密消息,格式同上。其中 1N100001 \leq N \leq 10000。输出格式输出一行,以相同的十六进制格式表示恢复的 N+1 字节密钥。

输入示例

1plaintext05262C5269143F314C2A69651A264B
610728413B63072C52222169720B425E

输出示例

1plaintext41434D2049435043204E454552432732

来源东北欧洲编程竞赛

2002编辑分享