编程完成棋盘密码的加密和解密
时间: 2023-08-05 19:21:30 浏览: 630
棋盘密码(也称为方格密码)是一种简单的替换密码,它使用一个方格棋盘来加密明文。棋盘的每个格子都对应一个字母,明文中的每个字母都在棋盘上找到对应的格子,然后用该格子的坐标(行数和列数)代替明文中的字母。加密后的密文就是一串数字。
加密流程如下:
1. 准备一个大小为 n x n 的方格棋盘,里面填入所有可能用到的字母和数字。
2. 将明文中的字母一个一个找到它在棋盘上对应的格子,然后用该格子的坐标(行数和列数)代替明文中的字母。如果明文中的字母不在棋盘上,可以用一个特殊的字符(如空格)代替。
3. 把所有的坐标按顺序写成一串数字,就是加密后的密文。
解密流程如下:
1. 根据密文中的数字和棋盘的大小,重新建立一个 n x n 的方格棋盘。
2. 将密文中的数字两个一组地读取出来,每一组数字代表一个格子的坐标(行数和列数)。
3. 在棋盘上找到对应的格子,取出格子中的字母,就是解密后的明文。
下面是 Python 代码实现:
```python
def encrypt(plain_text, n):
# 构建棋盘
board = [[' ' for i in range(n)] for j in range(n)]
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
k = 0
for i in range(n):
for j in range(n):
if k < len(chars):
board[i][j] = chars[k]
k += 1
# 加密明文
cipher_text = ''
for c in plain_text:
if c == ' ':
x, y = n-1, n-1
else:
for i in range(n):
for j in range(n):
if board[i][j] == c:
x, y = i, j
cipher_text += str(x) + str(y)
return cipher_text
def decrypt(cipher_text, n):
# 构建棋盘
board = [[' ' for i in range(n)] for j in range(n)]
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
k = 0
for i in range(n):
for j in range(n):
if k < len(chars):
board[i][j] = chars[k]
k += 1
# 解密密文
plain_text = ''
i = 0
while i < len(cipher_text):
x = int(cipher_text[i])
y = int(cipher_text[i+1])
i += 2
if x == n-1 and y == n-1:
plain_text += ' '
else:
plain_text += board[x][y]
return plain_text
```
其中,`n` 表示棋盘的大小。例如,当 `n=6` 时,棋盘上填入了所有的大写字母和数字。对于明文中没有出现过的字符,可以用空格代替。