#P690. 【NOIP2012-S2】Vigenère 密码
【NOIP2012-S2】Vigenère 密码
题目描述
16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密码。Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。
在密码学中,我们称需要加密的信息为明文,用 表示;称加密后的信息为密文,用 表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为 。在 Vigenère 密码中,密钥 是一个字母串,。当明文 时,得到的密文 ,其中 。运算 的规则基于以下的 Vigenère 方表:
- 将字母 A~Z 按顺序排列,行为明文字母,列为密钥字母,交叉点即为密文字母。
- 例如,行为
A,列为B,则密文为B;行为C,列为D,则密文为F。即密文字母 是明文字母 在密钥字母 对应的行向右循环移位后的字母,或者简单说:若将 A~Z 对应数字 0~25,则 运算等价于 (再将数字转为字母)。 - 解密时,明文 对应的字母。
Vigenère 加密在操作时需要注意:
- 运算忽略参与运算的字母的大小写,并保持字母在明文 中的大小写形式;密文的大小写由对应位置的明文决定。
- 当明文 的长度大于密钥 的长度时,将密钥 重复使用。
例如,明文 ,密钥 时,密钥重复为 abcabcabca,密文 。
现在给定密钥和密文,请解密得到明文。
输入格式
输入共 行。
第一行为一个字符串,表示密钥 ,长度不超过 ,其中仅包含大小写英文字母。
第二行为一个字符串,表示经加密后的密文 ,长度不超过 ,其中仅包含大小写英文字母。
输出格式
输出共 行,一个字符串,表示解密得到的明文。
样例
CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm
Wherethereisawillthereisaway
数据范围与提示
- 对于 的数据,密钥长度不超过 ,密文长度不超过 ,且都仅包含英文字母。
- 解密时注意保持明文字母的大小写:若密文某位为大写,则明文对应位也为大写;若为小写,则明文也为小写。
来源
NOIP 2012 提高组 Day2