[Ejercicio de algoritmo] 24: Cifrado César

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))

Supongo que te gusta

Origin blog.csdn.net/qq_39780701/article/details/131530700
Recomendado
Clasificación