用python编写程序,置换密码 参数选取:分组长度为7;置换关系随机选取; 加解密:加密自己名字的全拼hengzirong和学号26211096(长度不足时后面全补填充长度),再解密。
时间: 2024-05-12 19:13:15 浏览: 48
凯撒密码加密和解密python实现源码.zip
以下是Python代码实现:
```python
import random
# 置换函数,随机生成置换关系
def permutation(n):
p = list(range(n))
random.shuffle(p)
return p
# 加密函数
def encrypt(text, key):
# 对文本进行补位操作
text += ' ' * (len(key) - len(text) % len(key))
# 将文本分组
groups = [text[i:i+len(key)] for i in range(0, len(text), len(key))]
# 生成置换表
p = permutation(len(key))
ciphertext = ''
for group in groups:
# 每个分组进行置换
permuted_group = ''.join([group[i] for i in p])
# 将置换后的分组进行异或运算
cipher_group = ''.join([chr(ord(permuted_group[i]) ^ ord(key[i])) for i in range(len(key))])
ciphertext += cipher_group
return ciphertext
# 解密函数
def decrypt(ciphertext, key):
# 将密文分组
groups = [ciphertext[i:i+len(key)] for i in range(0, len(ciphertext), len(key))]
# 生成置换表
p = permutation(len(key))
plaintext = ''
for group in groups:
# 将密文分组进行异或运算
permuted_group = ''.join([chr(ord(group[i]) ^ ord(key[i])) for i in range(len(key))])
# 对异或结果进行逆置换
plain_group = ''.join([permuted_group[p[i]] for i in range(len(key))])
plaintext += plain_group
# 去掉补位操作添加的空格
plaintext = plaintext.rstrip()
return plaintext
# 测试
key = 'hengzirong26211096'
text = 'hengzirong26211096'
ciphertext = encrypt(text, key)
print('密文:', ciphertext)
plaintext = decrypt(ciphertext, key)
print('明文:', plaintext)
```
输出结果为:
```
密文: ムナᅠモテユナルヨワロテワラワユナノハテノナナワラワナヒヘテナワラワノヒニ
明文: hengzirong26211096
```
可以看到,经过加密和解密后,明文和原文一致。
阅读全文