加密通话

时间限制: 1000 ms 内存限制: 65536 kb
总通过人数: 0 总提交人数: 0

题目背景

维吉尼亚密码是一种经典的加密的方式。维吉尼亚密码对明文进行加密需要密钥和密码表(大小为$26 \times 26$)。

举例说明:

在本次加密中,密码表如下图绿色方框部分所示:

(图中第一行和第一列是密码表隐含的的行列标识,例如密码表的第W行第F列的字母是B

明文为 WaiBiWaiBi
密钥为 Fei

先将密钥本身进行重复,直至长度和明文相同,结果如下:

明文为 WaiBi WaiBi
密钥为 FeiFe iFeiF

接下来对于明文的第$i$个字母,确定到密码表中这个字母对应的;对于密钥的第$i$个字母,确定到密码表中这个字母对应的。行列相交处的字母,就是密文的第$i$个字母。(加密后字母的大小写保持不变,且空格不参与加密)

密文的第一个字母B的得出在图中已经形象的说明了,选取第W行第F列的字母B

明文加密完毕的结果为:BeqGm EfmJn

那么维吉尼亚密码的密码表是如何得来的呢?本次加密使用的密码表实际上是经典的维吉尼亚密码表。但可以注意到,在这种加密方式下,只要密码表的每一列中的字母都互不相同,那么在密钥确定的情况下,明文和密文是一一对应的。因此在本题中,每一列中的字母都互不相同的密码表就认为是合法的。

题目介绍

给予加密所用的密钥以及明文,以及经过加密后得到的密文。如果加密的方法和题目背景所述的相同,请你求出加密所用的密码表。注意:

  • 正确的加密方法同题目背景所述;

  • 密钥只包含大小写英文字母;

  • 明文和密文中包含大小写英文字母和空格,加密后字母的大小写保持不变,且空格不参与加密(应在密文中原样输出空格)。

输入格式

多组数据输入。

对于每组数据:

第一行是字符串,代表密钥,长度不超过 $10^3$ ;

第二行是字符串,代表明文。长度不超过 $10^5$ ;

第二行是字符串,代表密文。长度不超过 $10^5$ 。

输出格式

对于每组数据:

  • 若无法正确得到密码表,输出一行字符串:ARE YOU GOOD MALAYS1A?
  • 若能够得到正确的密码表,输出 $26$ 行,每行 $26$ 个字符,代表密码表。约定密码表隐含的行列标识和题目背景中描述得一样。对于密码表中可以确定的位置,输出该位置上应该填入的大写字母;对于密码表中不能确定位置,在这个位置上输出一个单引号 '
  • 之后输出一行空行

输入样例

FEI
Wai Bi Wai Bi
Beq Gm Efm Jn
FEI
Wai Bi Wai Bi
Bmq Gm Efm Jn

输出样例

''''EF''''''''''''''''''''
'''''G''J'''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''MN''Q'''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
'''''B''E'''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''
''''''''''''''''''''''''''

ARE YOU GOOD MALAYS1A?

Author: Lucien Li

相关推荐