题目
已知明文[1]为 battleon 密钥为 cipher 用 Playfair 密码算法[2]加密后的明文为( ) ( 实现约定插入的字符为 d ) A db us sm cu ku B do ym sm cu ku C db ym ym np ug D do ym sm cu mf
已知明文[1]为 battleon 密钥为 cipher 用 Playfair 密码算法[2]加密后的明文为( ) ( 实现约定插入的字符为 d )
A db us sm cu ku
B do ym sm cu ku
C db ym ym np ug
D do ym sm cu mf
题目解答
答案
选项 C 是正确的加密结果,明文为 "battleon" 使用密钥 "cipher" 加密后得到的 Playfair 密码为:
c i p h e
r a b d f
g k l m n
o q s t u
v w x y z
通过该表进行加密,将明文中的相邻字母分成一组(如果有奇数个字母,在最后添加一个虚拟字母,比如这里使用 d),然后对每对字母进行加密。例如,第一对明文字母 "ba" 被加密为 "db",第二对 "tt" 被加密为 "ym",以此类推,直到得到密文[3] "dbymymnpug"。
解析
步骤 1:构建 Playfair 密码表
根据密钥 "cipher" 构建 Playfair 密码表。首先将密钥中的字母按顺序填入 5x5 的矩阵中,然后将剩余的字母(按字母表顺序,不包括密钥中已出现的字母)填入矩阵中。注意,字母 "j" 通常被省略或与 "i" 合并。因此,构建的密码表如下:
c i p h e
r a b d f
g k l m n
o q s t u
v w x y z
步骤 2:分组明文
将明文 "battleon" 分成每两个字母一组。如果明文长度为奇数,则在最后添加一个约定的字符(这里为 "d"),以确保每组都有两个字母。因此,明文 "battleon" 变为 "bat tle ond",分组为 "ba", "tt", "le", "on", "d"。
步骤 3:加密每组字母
根据 Playfair 密码表,对每组字母进行加密。加密规则如下:
- 如果两个字母在同一行,则将它们分别替换成该行中它们右侧的字母(如果到达行尾,则循环到行首)。
- 如果两个字母在同一列,则将它们分别替换成该列中它们下方的字母(如果到达列尾,则循环到列首)。
- 如果两个字母既不在同一行也不在同一列,则将它们替换成它们所在行和列的交叉点上的字母。
根据上述规则,对每组字母进行加密:
- "ba" -> "db"
- "tt" -> "ym"
- "le" -> "ym"
- "on" -> "np"
- "d" -> "ug"(因为 "d" 单独出现,所以与约定字符 "d" 组成 "dd",加密为 "ug")
步骤 4:组合加密后的字母
将加密后的字母组合起来,得到最终的密文 "db ym ym np ug"。
根据密钥 "cipher" 构建 Playfair 密码表。首先将密钥中的字母按顺序填入 5x5 的矩阵中,然后将剩余的字母(按字母表顺序,不包括密钥中已出现的字母)填入矩阵中。注意,字母 "j" 通常被省略或与 "i" 合并。因此,构建的密码表如下:
c i p h e
r a b d f
g k l m n
o q s t u
v w x y z
步骤 2:分组明文
将明文 "battleon" 分成每两个字母一组。如果明文长度为奇数,则在最后添加一个约定的字符(这里为 "d"),以确保每组都有两个字母。因此,明文 "battleon" 变为 "bat tle ond",分组为 "ba", "tt", "le", "on", "d"。
步骤 3:加密每组字母
根据 Playfair 密码表,对每组字母进行加密。加密规则如下:
- 如果两个字母在同一行,则将它们分别替换成该行中它们右侧的字母(如果到达行尾,则循环到行首)。
- 如果两个字母在同一列,则将它们分别替换成该列中它们下方的字母(如果到达列尾,则循环到列首)。
- 如果两个字母既不在同一行也不在同一列,则将它们替换成它们所在行和列的交叉点上的字母。
根据上述规则,对每组字母进行加密:
- "ba" -> "db"
- "tt" -> "ym"
- "le" -> "ym"
- "on" -> "np"
- "d" -> "ug"(因为 "d" 单独出现,所以与约定字符 "d" 组成 "dd",加密为 "ug")
步骤 4:组合加密后的字母
将加密后的字母组合起来,得到最终的密文 "db ym ym np ug"。