A | 00001 | B | 00010 | C | 00011 | D | 00100 | E | 00101 | F | 00110 | G | 00111 |
H | 01000 | I | 01001 | J | 01010 | K | 01011 | L | 01100 | M | 01101 | N | 01110 |
O | 01111 | P | 10000 | Q | 10001 | R | 10010 | S | 10011 | T | 10100 | U | 10101 |
V | 10110 | W | 10111 | X | 11000 | Y | 11001 | Z | 11010 |
小明使用该编码对由大写字母组成的明文字符串进行加密,加密算法如下:
l依次将明文中每个字符转换为其对应的二进制编码;
l依次将密钥中每个字符转换为其对应的二进制编码;
l依次取出密钥的每个二进制位与原文的二进制位进行异或运算(若密钥长度不够,则循环重复使用),得到的结果即为密文编码;
l二进制位异或运算原则:11=0,00=0,10=1,01=1
例如,明文:HELLO,密钥:ZHE,则按上述方式进行加密:
明文字符 | H | E | L | L | O |
密钥字符 | Z | H | E | Z | H |
明文编码 | 01000 | 00101 | 01100 | 01100 | 01111 |
密钥编码 | 11010 | 01000 | 00101 | 11010 | 01000 |
密文编码 | 10010 | 01101 | 01001 | 10110 | 00111 |
def ctob(c): # 将一个字符转换为其对应的5位二进制编码
n =
ans = ""
for i in range(5):
r =
n = n // 2
ans = str(r) + ans
return ans
def xor(s1, s2): # 将二进制数s1和s2进行异或运算
ans = ""
for i in range(len(s1)):
if :
ans += "0"
else:
ans += "1"
return ans
s = input("请输入明文(大写字母):")
key = input("请输入密钥(大写字母):")
ans = ""
for i in range(len(s)):
s1 = ctob(s[i])
k =
s2 = ctob(key[k])
b = xor(s1, s2)
ans = ans + b
print("密文编码为:", ans)