凯撒加密与解密实现

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_Bofobco

key=2
oujpr_UXEN_Anenabn

key=3
ntioq_TWDM_Zmdmzam

key=4
mshnp_SVCL_Ylclyzl

key=5
lrgmo_RUBK_Xkbkxyk

key=6
kqfln_QTAJ_Wjajwxj

key=7
jpekm_PSZI_Vizivwi

key=8
iodjl_ORYH_Uhyhuvh

key=9
hncik_NQXG_Tgxgtug

key=10
gmbhj_MPWF_Sfwfstf

key=11
flagi_LOVE_Reverse

key=12
ekzfh_KNUD_Qdudqrd

key=13
djyeg_JMTC_Pctcpqc

key=14
cixdf_ILSB_Obsbopb

key=15
bhwce_HKRA_Naranoa

key=16
agvbd_GJQZ_Mzqzmnz

key=17
zfuac_FIPY_Lypylmy

key=18
yetzb_EHOX_Kxoxklx

key=19
xdsya_DGNW_Jwnwjkw

key=20
wcrxz_CFMV_Ivmvijv

key=21
vbqwy_BELU_Huluhiu

key=22
uapvx_ADKT_Gtktght

key=23
tzouw_ZCJS_Fsjsfgs

key=24
syntv_YBIR_Erirefr

key=25
rxmsu_XAHQ_Dqhqdeq

key=26
qwlrt_WZGP_Cpgpcdp

 

 

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

 

以上是关于凯撒加密与解密实现的主要内容,如果未能解决你的问题,请参考以下文章

凯撒密码加密解密--JAVA实现(基础)

Android安全加密:对称加密与非对称加密

用java 编写一个凯撒加密和解密

shell整理(38)===凯撒加密和解密

详解密码学中几种常见密码加密与解密

C语言练习_2用C语言实现凯撒密码加密解密