凯撒加密与解密实现
Posted mayfly-nymph
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了凯撒加密与解密实现相关的知识,希望对你有一定的参考价值。
1.背景与原理
引自维基百科
在密码学中,凯撒密码(英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。
简单来说就是当秘钥为n,其中一个待加密字符ch,加密之后的字符为ch+n,当ch+n超过‘z‘时,回到‘a‘计数。
凯撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:
解密就是:
2.加密
举例
明文:flagi_LOVE_Reverse
key=11
model = "abcdefghijklmnopqrstuvwxyz" model2 = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘ str1 = "flagi_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‘)
得到加密之后的字符串:
qwlrt_WZGP_Cpgpcdp
3.解密
model = "abcdefghijklmnopqrstuvwxyz" model2 = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘ str1 = "qwlrt_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
pvkqs_VYFO_Bofobcokey=2
oujpr_UXEN_Anenabnkey=3
ntioq_TWDM_Zmdmzamkey=4
mshnp_SVCL_Ylclyzlkey=5
lrgmo_RUBK_Xkbkxykkey=6
kqfln_QTAJ_Wjajwxjkey=7
jpekm_PSZI_Vizivwikey=8
iodjl_ORYH_Uhyhuvhkey=9
hncik_NQXG_Tgxgtugkey=10
gmbhj_MPWF_Sfwfstfkey=11
flagi_LOVE_Reversekey=12
ekzfh_KNUD_Qdudqrdkey=13
djyeg_JMTC_Pctcpqckey=14
cixdf_ILSB_Obsbopbkey=15
bhwce_HKRA_Naranoakey=16
agvbd_GJQZ_Mzqzmnzkey=17
zfuac_FIPY_Lypylmykey=18
yetzb_EHOX_Kxoxklxkey=19
xdsya_DGNW_Jwnwjkwkey=20
wcrxz_CFMV_Ivmvijvkey=21
vbqwy_BELU_Huluhiukey=22
uapvx_ADKT_Gtktghtkey=23
tzouw_ZCJS_Fsjsfgskey=24
syntv_YBIR_Erirefrkey=25
rxmsu_XAHQ_Dqhqdeqkey=26
qwlrt_WZGP_Cpgpcdp
查看之后,我们可以知道,key=11时,是我们解密之后正确的字符串。
以上是关于凯撒加密与解密实现的主要内容,如果未能解决你的问题,请参考以下文章