【算法练习】24:凯撒密码

一、凯撒密码介绍:

采用替换的方式对英文字母进行处理,将每一个英文字符循环替换为字母表序列中该字符的后面的第三个字符,即循环右移3位。

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ

密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

若设偏移量位n,可以得出加解密公式:

 二、算法实现

1、简单版本(只实现了小写英文字符串的加密)

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、升级版本(实现中文和英文的加密)

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

猜你喜欢

转载自blog.csdn.net/qq_39780701/article/details/131530700