通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解
时间: 2023-11-10 13:01:46 浏览: 64
替代密码算法:
```python
# 替代密码算法
def substitution_cipher(plaintext, key):
# 构建密文字典
ciphertext_dict = {}
for i in range(len(key)):
ciphertext_dict[chr(97+i)] = key[i]
# 加密明文
ciphertext = ''
for c in plaintext:
if c.isalpha():
if c.isupper():
ciphertext += ciphertext_dict[c.lower()].upper()
else:
ciphertext += ciphertext_dict[c]
else:
ciphertext += c
return ciphertext
```
示例:
```python
plaintext = 'hello world'
key = 'qwertyuiopasdfghjklzxcvbnm'
ciphertext = substitution_cipher(plaintext, key)
print(ciphertext) # lazzq zphqw
```
置换密码算法:
```python
# 置换密码算法
def transposition_cipher(plaintext, key):
# 根据密钥计算列数
col_num = len(key)
# 根据明文长度计算行数
row_num = (len(plaintext) + col_num - 1) // col_num
# 在明文末尾填充空格
plaintext += ' ' * (row_num * col_num - len(plaintext))
# 构建密文矩阵
matrix = []
for i in range(row_num):
row = [plaintext[i*col_num+j] for j in range(col_num)]
matrix.append(row)
# 按照密钥的字母顺序排序列
sorted_index = sorted(range(col_num), key=lambda k: key[k])
# 按照排序后的列顺序输出密文
ciphertext = ''
for j in sorted_index:
for i in range(row_num):
ciphertext += matrix[i][j]
return ciphertext
```
示例:
```python
plaintext = 'hello world'
key = 'helo wrd'
ciphertext = transposition_cipher(plaintext, key)
print(ciphertext) # hleolwolrd
```