1. Introducción al cifrado César:
Las letras inglesas se procesan mediante reemplazo, y cada carácter inglés se reemplaza cíclicamente con el tercer carácter después del carácter en la secuencia alfabética, es decir, el desplazamiento cíclico a la derecha se realiza en 3 bits.
Alfabeto en texto plano: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Alfabeto de texto cifrado: DEFGHIJKLMNOPQRSTUVWXYZABC
Si el bit de desplazamiento se establece en n, se pueden obtener las fórmulas de cifrado y descifrado:
2. Implementación del algoritmo
1. Versión simple (solo se implementa el cifrado de cadenas en minúsculas en inglés)
def encrypt(s):
ciphertext = ''
for i in s:
i = chr(ord('a')+(ord(i) - ord('a') + 3) % 26)
ciphertext += i
return ciphertext
def decrypt(s):
message = ''
for i in s:
i = chr(ord('a')+(ord(i) - ord('a') - 3) % 26)
message += i
return message
if __name__ == '__main__':
s = input('请输入一串小写字母组成的字符串:')
print(f'将{s}加密后的密文 =', encrypt(s))
print(f'将{s}解密后的明文 =' , decrypt(s))
2. Versión mejorada (que implementa cifrado en chino e inglés)
def encrypt(s):
ciphertext = ''
for i in s:
if 'a' <= i <= 'z':
# 判断小写字母
i = chr(ord('a') + (ord(i) - ord('a') + 3) % 26)
elif 'A' <= i <= 'Z':
# 判断大写字母
i = chr(ord('A') + (ord(i) - ord('A') + 3) % 26)
elif 0x4E00 <= ord(i) <= 0x9FA5:
# 判断中文字符
i = chr(ord(i) + 3)
else:
# 其他字符不做加密
pass
# 生成密文
ciphertext += i
return ciphertext
def decrypt(s):
message = ''
for i in s:
if 'a' <= i <= 'z':
# 判断小写字母
i = chr(ord('a') + (ord(i) - ord('a') - 3) % 26)
elif 'A' <= i <= 'Z':
# 判断大写字母
i = chr(ord('A') + (ord(i) - ord('A') - 3) % 26)
elif 0x4E00 <= ord(i) <= 0x9FA5:
# 判断中文字符
i = chr(ord(i) - 3)
else:
# 其他字符不做加密
pass
# 生成密文
message += i
return message
if __name__ == '__main__':
s = input('请输入一串小写字母组成的字符串:')
print(f'将"{s}"加密后的密文 =', encrypt(s))
print(f'将"{s}"解密后的明文 =' , decrypt(s))