美文网首页密码学笔记
(二)传统密码——Caesar密码

(二)传统密码——Caesar密码

作者: 渔父歌 | 来源:发表于2019-03-13 20:32 被阅读0次

    Caesar密码是已知最早的代换密码,又Julius Caesar发明。

    Caesar密码非常简单,就是对字母表中的每个字母,用它之后的第三个字母来代换。例如:

    明文:meet me after the toga party
    密文:PHHW PH DIWHU WKH WRJD SDUWB
    (在密码学中一般使用小写字母表示明文,大写字母表示密文)

    如果我们让每个字母对应一个数字,比如字母 a-z分别与数字 0-25对应。那么加密算法可以用如下表达式表达。对每个明文字母p,代换成秘文字母C:
    C = E(p) = (p+3) mod(26)
    还可以更改移位的数量k,这样就得到了一般的Caesar算法, k的取值从1到25:
    C = E(p) = (p+k) mod(26)
    解密算法为:
    p = D(C) = (C-k)mod (26)

    用python实现的Caesar算法如下:

    def Caeser_encode(text, offset=3):
        result = []
        for t in text.lower().encode():
            result.append((t + offset - 97) % 26 + 97)
        return bytes(result).decode()
    
    def Caeser_decode(text, offset=3):
        result = []
        for t in text.lower().encode():
            result.append((t - offset - 97) % 26 + 97)
        return bytes(result).decode()
    

    代码里的97对应字母a的ascii码值。

    Caesar算法有三个特征:

    1. 已知加密和解密算法
    2. 密钥空间只有25
    3. 明文所用的语言是已知的,且其意义易于识别

    根据Caeser算法的这三个特征攻击者可以使用穷举攻击来获取密钥和明文。用python实现的一种破解方式如下:

    def Caeser_attack(text):
        for i in range(26):
            print(Caeser_decode(text, i), i)
    

    对于密文:PHHW
    使用破解算法的输出如下:
    phhw 0
    oggv 1
    nffu 2
    meet 3
    ldds 4
    kccr 5
    jbbq 6
    iaap 7
    hzzo 8
    gyyn 9
    fxxm 10
    ewwl 11
    dvvk 12
    cuuj 13
    btti 14
    assh 15
    zrrg 16
    yqqf 17
    xppe 18
    wood 19
    vnnc 20
    ummb 21
    tlla 22
    skkz 23
    rjjy 24
    qiix 25

    可以很容易看出,只有当i=3时,解密出的明文才是有意义的,所以可以确定密钥k=3。

    这里需要特别注意的是,攻击者能够破解密文并不意味着可以获取信息,如果用来加密的明文本身是不可识别的(比如明文是用其他加密算法加密过的),攻击者就无法通过穷举的方式来获取密钥,因为攻击者无法知道哪一个输出才是对应的明文。

    相关文章

      网友评论

        本文标题:(二)传统密码——Caesar密码

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