一、移位密码(凯撒密码)
移位密码是一种简单的加密方法,它通过将明文中的每个字符按照一定规则向左或向右移动若干位来生成密文。移位密码通常使用偏移量
来确定每个字符移动的位数。
二、加密解密
1. 移位加密
移位加密算法将明文中的每个字符按照一定规则向左或向右移动若干位来生成密文。具体步骤如下:
- 选择一个偏移量 k k k,确定每个字符需要向左移动还是向右移动。
- 对于明文中的每个字符,根据偏移量将其向左或向右移动相应的位数,并将结果记录下来。
- 将所有移位后的字符连接起来,得到密文。
例如,如果明文是 HELLO
,偏移量为3,则加密后的密文就是 KHOOR
(可结合下方字母数字表
查看)。这里的偏移量表示字母移动的距离,当偏移量为正数时,字母向右移动;当偏移量为负数时,字母向左移动。
2. 移位解密
移位解密算法将密文中的每个字符按照与加密相反的规则向左或向右移动若干位来还原明文。具体步骤如下:
- 选择一个偏移量 k k k,确定每个字符需要向左移动还是向右移动。
- 对于密文中的每个字符,根据偏移量将其向左或向右移动相应的位数,并将结果记录下来。
- 将所有移位后的字符连接起来,得到明文。
例如,如果密文是 KHOOR
,偏移量为3,则解密后的明文就是 HELLO
。
3.其他表述
x是加密前的字符,y是加密后的字符。
对26取余的作用是确保加密和解密过程中使用的数字始终保持在0~25的范围内,从而实现正确的加密和解密操作。
加密: e ( x ) = x + k m o d 26 e(x)=x+k\bmod26 e(x)=x+kmod26 ,
解密: d ( y ) = y − k m o d 26 d(y)=y-k\bmod26 d(y)=y−kmod26
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 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
三、python实现
# 定义一个加密函数,接收两个参数:待加密文本和偏移量[0~25]
def encrypt(text: str, s: int):result = ""# 遍历文本中的所有字符for char in text:# 判断字符是否为大写字母,如果是则将其加密if 65 <= ord(char) <= 90:result += chr((ord(char) + s - 65) % 26 + 65)# 判断字符是否为小写字母,如果是则将其加密elif 97 <= ord(char) <= 122:result += chr((ord(char) + s - 97) % 26 + 97)# 不是字母,则直接追加到结果字符串中else:result += charprint(f"{text}加密结果:{result},偏移量:{s}")# 定义一个解密函数,接收一个参数:待解密的密文
def decrypt(ciphertext: str):for s in range(26):result = ''for char in ciphertext:if 65 <= ord(char) <= 90:result += chr((ord(char) - s - 65) % 26 + 65)elif 97 <= ord(char) <= 122:result += chr((ord(char) - s - 97) % 26 + 97)else:result += charprint(f"偏移量为{s}时解密结果为:{result}")print('加密测试')
text = "meet me after the party."
s = 3
encrypt(text, s)print('解密测试(上方加密测试的结果)')
ciphertext = "phhw ph diwhu wkh sduwb"
decrypt(ciphertext)
print("\n")print('加密测试')
text = "This is a test message."
s = 8
encrypt(text, s)print('解密测试(上方加密测试的结果)')
ciphertext = "Bpqa qa i bmab umaaiom."
decrypt(ciphertext)
四、运行结果