美文网首页
凯撒密码(Caesar's code)

凯撒密码(Caesar's code)

作者: Co_zy | 来源:发表于2017-10-12 14:56 被阅读0次

    简介

    凯撒密码(Caesar's code)作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。


    ASCII表

    http://www.asciima.com/ascii/12.html


    实现凯撒密码算法核心在下面
    加密

    C=E(p)=(p+3) mod 26 
    C=E(p)=(p+k) mod 26 
    

    假设p为需要加密的字母,位数3就是加密解密的密钥,可以参照上面的图表
    解密

    p=D(C)=(C-k) mod 26
    

    算法实现

    先设一个对照表,然后用两个函数实现加密 解密,加密函数传入需要加密的明文位数,解密函数传入需要解密的密文位数

    letter_list='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    
    def Encrypt(plaintext,key):
        ciphertext = ''
        for i in plaintext:
            if i.isalpha():
                if i.isupper():
                    ciphertext += letter_list[(ord(i)-65+key)%26]
                else:
                    ciphertext += letter_list[(ord(i)-97+key)%26]
            else:
                ciphertext += i
        return ciphertext
    
    def Decrypt(ciphertext,key):
        plaintext=''
        for i in ciphertext: #遍历明文
            if i.isalpha(): #判断是否为字母
                if i.isupper(): 
                    #明文是否为字母,如果是,判断大小写,分别用ASCII进行加密
                    plaintext += letter_list[(ord(i)-65+key)%26]
                else:
                    #如果是小写,需要转成小写,因为letter_list中都是大写
                    plaintext += letter_list[(ord(i)-97+key)%26]
            else:
                #如果不为字母,直接添加到密文字符里
                plaintext += i
        return ciphertext
    

    相关文章

      网友评论

          本文标题:凯撒密码(Caesar's code)

          本文链接:https://www.haomeiwen.com/subject/jyunyxtx.html