A. 维吉尼亚密码

    传统题 1000ms 256MiB

维吉尼亚密码

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

在16世纪的欧洲,随着宗教改革与跨国贸易的兴起,外交官与商人急需一种能够替代脆弱的单表替换密码的通信手段。1523年,被誉为“密码学之父”的莱昂·巴蒂斯塔·阿尔伯蒂提出了多表替换的构想,但真正将其体系化并推广开来的是16世纪的法国外交官布莱斯·德·维吉尼亚(Blaise de Vigenère)

维吉尼亚密码(Vigenère Cipher)的核心在于一字一密的近似实现。通过使用一个关键词,它使得明文中同一个字母在密文中可以被加密成不同的形式,彻底打破了简单替换密码中字母频率的统计规律,在长达三个世纪的时间里被称为“不可破译的密码”。

加密原理如下:

  • 使用一张 26×26 的“维吉尼亚密码表”(如下表所示),其中行代表明文字母,列代表密钥字母。
  • 对明文中的每个字母,以其自身为行号,对应密钥字母为列号,在表中交叉处找到密文字母。
  • 密钥长度不足时,循环重复使用密钥字母。

维吉尼亚密码表:

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B   B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C   C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D   D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E   E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F   F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G   G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H   H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I   I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J   J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K   K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L   L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M   M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N   N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O   O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P   P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q   Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R   R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S   S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T   T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U   U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V   V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W   W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X   X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y   Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z   Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

加密规则:

  1. 密码本定位:给定一个明文字符 PP 和一个密钥字符 KK,在密码表中找到第 rowrow 行(row=PArow = P - 'A')和第 colcol 列(col=KAcol = K - 'A')的交叉点,该位置的字符即为密文字符。
  2. 密钥循环:当密钥长度小于明文有效字符数时,按顺序循环使用密钥字符。
    • 示例:若密钥为 ABC,明文为 HELLO(有效字符5个),则加密对应关系为:
      • H(第1个)→ 使用密钥 A
      • E(第2个)→ 使用密钥 B
      • L(第3个)→ 使用密钥 C
      • L(第4个)→ 循环回密钥 A
      • O(第5个)→ 使用密钥 B
  3. 空格处理:明文中的空格不参与加密,直接保留在原位置。

输入格式

输入为单组测试数据

  • 第 1 行:一个字符串 PlaintextPlaintext,表示待加密的明文(包含大写字母和空格,1Plaintext10001 \le |Plaintext| \le 1000)。
  • 第 2 行:一个字符串 KeyKey,表示加密密钥(仅包含大写字母,1Key1001 \le |Key| \le 100)。

输出格式

输出一行对应的密文字符串。


输入输出样例

DATA SECURITY
BEST
EELT TIUNSMLR

说明/提示

数据范围说明:

  • 明文长度 1000\le 1000
  • 密钥长度 100\le 100
  • 密码本为标准维吉尼亚密码表

2026年05月04日周一高级别段C++信息学周赛

未参加
状态
已结束
规则
OI
题目
4
开始于
2026-5-4 9:30
结束于
2026-5-4 13:00
持续时间
3.5 小时
主持人
参赛人数
6