• 凯撒加密与解密实现


    背景与原理

    引自维基百科

    在密码学中,凯撒密码(英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。

     

    简单来说就是当秘钥为n,其中一个待加密字符ch,加密之后的字符为ch+n,当ch+n超过'z'时,回到'a'计数。

    凯撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:

    解密就是:

    根据偏移量的不同,还存在若干特定的恺撒密码名称

    • 偏移量为 10:Avocat (A→K)
    • 偏移量为 13:ROT13
    • 偏移量为 -5:Cassis (K 6)
    • 偏移量为 -6:Cassette (K 7)

    加密

    举例

    明文:flag{i_LOVE_Reverse}

    key=11

    model = "abcdefghijklmnopqrstuvwxyz"
    model2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
    str1 = "flag{i_LOVE_Reverse}"
    key = 11
    
    for s in str1:
        if s.islower():
            n = model.find(s)
            s = model[n-key]
        elif s.isupper():
            n = model2.find(s)
            s = model2[n - key]
        print(s, end='')
    print('
    ')

    得到加密之后的字符串:

    qwlr{t_WZGP_Cpgpcdp}

    解密

    model = "abcdefghijklmnopqrstuvwxyz"
    model2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
    str1 = "qwlr{t_WZGP_Cpgpcdp}"
    
    for key in range(1,27):
        print("key=%d"%key, end='
    ')
        for s in str1:
            if s.islower():
                n = model.find(s)
                s = model[n-key]
            elif s.isupper():
                n = model2.find(s)
                s = model2[n-key]
            print(s, end='')
        print('
    ')

    key=1
    pvkq{s_VYFO_Bofobco}

    key=2
    oujp{r_UXEN_Anenabn}

    key=3
    ntio{q_TWDM_Zmdmzam}

    key=4
    mshn{p_SVCL_Ylclyzl}

    key=5
    lrgm{o_RUBK_Xkbkxyk}

    key=6
    kqfl{n_QTAJ_Wjajwxj}

    key=7
    jpek{m_PSZI_Vizivwi}

    key=8
    iodj{l_ORYH_Uhyhuvh}

    key=9
    hnci{k_NQXG_Tgxgtug}

    key=10
    gmbh{j_MPWF_Sfwfstf}

    key=11
    flag{i_LOVE_Reverse}

    key=12
    ekzf{h_KNUD_Qdudqrd}

    key=13
    djye{g_JMTC_Pctcpqc}

    key=14
    cixd{f_ILSB_Obsbopb}

    key=15
    bhwc{e_HKRA_Naranoa}

    key=16
    agvb{d_GJQZ_Mzqzmnz}

    key=17
    zfua{c_FIPY_Lypylmy}

    key=18
    yetz{b_EHOX_Kxoxklx}

    key=19
    xdsy{a_DGNW_Jwnwjkw}

    key=20
    wcrx{z_CFMV_Ivmvijv}

    key=21
    vbqw{y_BELU_Huluhiu}

    key=22
    uapv{x_ADKT_Gtktght}

    key=23
    tzou{w_ZCJS_Fsjsfgs}

    key=24
    synt{v_YBIR_Erirefr}

    key=25
    rxms{u_XAHQ_Dqhqdeq}

    key=26
    qwlr{t_WZGP_Cpgpcdp}

    查看之后,我们可以知道,key=11时,是我们解密之后正确的字符串。

     在线解密平台:

    https://planetcalc.com/1434/

    https://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php

  • 相关阅读:
    C# 网络编程之基于SMTP发送电子邮件
    C#实现邮件发送的功能
    Java发邮件基础篇
    java发送邮件高级篇
    Windows下bat脚本自动发邮件
    Python发送QQ邮件
    信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
    DOS命令整理
    JAVA对时间的操作
    JAVA 调用HTTP接口POST或GET实现方式(转)
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11577798.html
Copyright © 2020-2023  润新知