天天看點

加密解密算法學習

背景與原理

凱撒密碼

在密碼學中,凱撒密碼(英語:Caesar cipher),或稱凱撒加密、凱撒變換、變換加密,是一種最簡單且最廣為人知的加密技術。它是一種替換加密的技術,明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例如,當偏移量是3的時候,所有的字母A将被替換成D,B變成E,以此類推。這個加密方法是以羅馬共和時期凱撒的名字命名的,據稱當年凱撒曾用此方法與其将軍們進行聯系。

根據偏移量的不同,還存在若幹特定的恺撒密碼名稱:

1.偏移量為 10:Avocat (A→K)

2.偏移量為 13:ROT13

3.偏移量為 -5:Cassis (K 6)

4.偏移量為 -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('\n')
           

得到加密之後的字元串:

qwlr{t_WZGP_Cpgpcdp}

解密

model = "abcdefghijklmnopqrstuvwxyz"
model2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

str1 = "qwlr{t_WZGP_Cpgpcdp}"

for key in range(1,27):
    print("key=%d"%key, end='\n')
    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('\n')
           
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}