码迷,mamicode.com
首页 > 其他好文 > 详细

凯撒加密与解密实现

时间:2019-09-24 14:08:32      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:str1   svc   举例   def   bec   tcp   实现   thml   lsb   

1.背景与原理

引自维基百科

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

技术图片

 

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

 

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

技术图片

解密就是:

技术图片

 

2.加密

举例

明文: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}

 

3.解密

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}

 

 

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

 

凯撒加密与解密实现

标签:str1   svc   举例   def   bec   tcp   实现   thml   lsb   

原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11577798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!