凯撒密码原理和应用

凯撒密码简介

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

凯撒密码加密

凯撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ

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

E n ( x ) = ( x + n ) mod 26 {\displaystyle E_{n}(x)=(x+n)\mod 26} E_{{n}}(x)=(x+n)\mod 26

解密就是:

D n ( x ) = ( x − n ) mod 26 {\displaystyle D_{n}(x)=(x-n)\mod 26} 

解密凯撒密码

即使使用唯密文攻击,凯撒密码也是一种非常容易破解的加密方式。可能有两种情况需要考虑:

攻击者知道(或者猜测)密码中使用了某个简单的替换加密方式,但是不确定是凯撒密码;
攻击者知道(或者猜测)使用了凯撒密码,但是不知道其偏移量。

对于第一种情况,攻击者可以通过使用诸如频率分析或者样式单词分析的方法[6],马上就能从分析结果中看出规律,得出加密者使用的是凯撒密码。
偏移量 候选明文
0 exxegoexsrgi
1 dwwdfndwrqfh
2 cvvcemcvqpeg
3 buubdlbupodf
4 attackatonce
5 zsszbjzsnmbd
6 yrryaiyrmlac

23 haahjrhavujl
24 gzzgiqgzutik
25 fyyfhpfytshj

对于第二种情况,解决方法更加简单。由于使用凯撒密码进行加密的语言一般都是字母文字系统,因此密码中可能是使用的偏移量也是有限的,例如使用26个字母的英语,它的偏移量最多就是25(偏移量26等同于偏移量0,即明文;偏移量超过26,等同于偏移量1-25)。因此可以通过穷举法,很轻易地进行破解[6]。其中一种方法是在表格中写下密文中的某个小片段使用所有可能的偏移量解密后的内容——称为候选明文,然后分析表格中的候选明文是否具有实际含义,得出正确的偏移量,解密整个密文。例如,被选择出的密文片段是"EXXEGOEXSRGI",从右表中的候选明文,我们可以很快看出其正确的偏移量是4。也可以通过在每一个密文单词的每一个字母下面,纵向写下整个字母表其他字母,然后可以通过分析,得出其中的某一行便是明文。

另外一种攻击方法是通过频率分析。当密文长度足够大的情况下,可以先分析密文中每个字母出现的频率,然后将这一频率与正常情况下的该语言字母表中所有字母的出现频率做比较。例如在英语中,正常明文中字母E和T出现的频率特别高,而字母Q和Z出现的频率特别低,而在法语中出现频率最高的字母是E,最低的是K和W。可以通过这一特点,分析密文字母出现的频率,可以估计出正确的偏移量。此外,有时还可以将频率分析从字母推广到单词,例如英语中,出现频率最高的单词是[7]:the, of, and, a, to, in…。我们可以通过将最常见的单词的所有可能的25组密文,编组成字典,进行分析。比如QEB可能是the,MPQY可能是单词know(当然也可能是aden)。但是频率分析也有其局限性,它对于较短或故意省略元音字母或者其他缩写方式写成的明文加密出来的密文进行解密并不适用。

另外,通过多次使用凯撒密码来加密并不能获得更大的安全性,因为使用偏移量A加密得到的结果再用偏移量B加密,等同于使用A+B的偏移量进行加密的结果。

应用

以 We Call 网站Crypto - Caesar I 题为例
在这里插入图片描述解题过程:
1.根据题意可以判断要提交的内容就在 “OCZ LPDXF WMJRI AJS EPHKN JQZM OCZ GVUT YJB JA XVZNVM VIY TJPM PIDLPZ NJGPODJI DN ZHIXBVKKCWMX”中,这句话使用凯撒密码加密。
2. python 脚本解密

'''
破解思路:
    根据上文所述属于破解凯撒密码的第二种情况:攻击者知道(或者猜测)使用了凯撒密码,但是不知道其偏移量。进行破解
    脚本逻辑
    1)单个字符进行转换
        1)先判断大写小写
        2)使用 ascii 加减变换
    2)将要转换的语句存入一个 list 里
'''
# 对每一个字符进行转换
def Decode_Single_Caesar_cipher(char,numb):
    char = ord(char)
    if char >= 97:
        char -= 32
        if char-numb < 65:
            char = 91 - numb + (char-65)
        else:
            char = char - numb
    elif char >= 65:
        if char-numb < 65:
            char = 91 - numb + (char-65)
        else:
            char = char - numb
    return chr(char)

# 对一句话进行转换
def Decode_Caesar_cipher(sentence):
    res=[]
    str = ""
    for y in range(26,0,-1):
        for x in range(len(sentence)):
            str+=Decode_Single_Caesar_cipher(sentence[x],y)
        res.append(str)
        str=""
    return res

# 打印解密后明文
def print_Decode_Caesar_cipher(original_sentence):
    for x in range(0,26):
        print(Decode_Caesar_cipher(original_sentence)[x])
        
print_Decode_Caesar_cipher("OCZ LPDXF WMJRI AJS EPHKN JQZM OCZ GVUT YJB JA XVZNVM VIY TJPM PIDLPZ NJGPODJI DN ZHIXBVKKCWMX")
# 解密后结果
OCZ LPDXF WMJRI AJS EPHKN JQZM OCZ GVUT YJB JA XVZNVM VIY TJPM PIDLPZ NJGPODJI DN ZHIXBVKKCWMX
PDA MQEYG XNKSJ BKT FQILO KRAN PDA HWVU ZKC KB YWAOWN WJZ UKQN QJEMQA OKHQPEKJ EO AIJYCWLLDXNY
QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD LC ZXBPXO XKA VLRO RKFNRB PLIRQFLK FP BJKZDXMMEYOZ
RFC OSGAI ZPMUL DMV HSKNQ MTCP RFC JYXW BME MD AYCQYP YLB WMSP SLGOSC QMJSRGML GQ CKLAEYNNFZPA
SGD PTHBJ AQNVM ENW ITLOR NUDQ SGD KZYX CNF NE BZDRZQ ZMC XNTQ TMHPTD RNKTSHNM HR DLMBFZOOGAQB
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG OF CAESAR AND YOUR UNIQUE SOLUTION IS EMNCGAPPHBRC
UIF RVJDL CSPXO GPY KVNQT PWFS UIF MBAZ EPH PG DBFTBS BOE ZPVS VOJRVF TPMVUJPO JT FNODHBQQICSD
VJG SWKEM DTQYP HQZ LWORU QXGT VJG NCBA FQI QH ECGUCT CPF AQWT WPKSWG UQNWVKQP KU GOPEICRRJDTE
WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ RI FDHVDU DQG BRXU XQLTXH VROXWLRQ LV HPQFJDSSKEUF
XLI UYMGO FVSAR JSB NYQTW SZIV XLI PEDC HSK SJ GEIWEV ERH CSYV YRMUYI WSPYXMSR MW IQRGKETTLFVG
YMJ VZNHP GWTBS KTC OZRUX TAJW YMJ QFED ITL TK HFJXFW FSI DTZW ZSNVZJ XTQZYNTS NX JRSHLFUUMGWH
ZNK WAOIQ HXUCT LUD PASVY UBKX ZNK RGFE JUM UL IGKYGX GTJ EUAX ATOWAK YURAZOUT OY KSTIMGVVNHXI
AOL XBPJR IYVDU MVE QBTWZ VCLY AOL SHGF KVN VM JHLZHY HUK FVBY BUPXBL ZVSBAPVU PZ LTUJNHWWOIYJ
BPM YCQKS JZWEV NWF RCUXA WDMZ BPM TIHG LWO WN KIMAIZ IVL GWCZ CVQYCM AWTCBQWV QA MUVKOIXXPJZK
CQN ZDRLT KAXFW OXG SDVYB XENA CQN UJIH MXP XO LJNBJA JWM HXDA DWRZDN BXUDCRXW RB NVWLPJYYQKAL
DRO AESMU LBYGX PYH TEWZC YFOB DRO VKJI NYQ YP MKOCKB KXN IYEB EXSAEO CYVEDSYX SC OWXMQKZZRLBM
ESP BFTNV MCZHY QZI UFXAD ZGPC ESP WLKJ OZR ZQ NLPDLC LYO JZFC FYTBFP DZWFETZY TD PXYNRLAASMCN
FTQ CGUOW NDAIZ RAJ VGYBE AHQD FTQ XMLK PAS AR OMQEMD MZP KAGD GZUCGQ EAXGFUAZ UE QYZOSMBBTNDO
GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT BS PNRFNE NAQ LBHE HAVDHR FBYHGVBA VF RZAPTNCCUOEP
HVS EIWQY PFCKB TCL XIADG CJSF HVS ZONM RCU CT QOSGOF OBR MCIF IBWEIS GCZIHWCB WG SABQUODDVPFQ
IWT FJXRZ QGDLC UDM YJBEH DKTG IWT APON SDV DU RPTHPG PCS NDJG JCXFJT HDAJIXDC XH TBCRVPEEWQGR
JXU GKYSA RHEMD VEN ZKCFI ELUH JXU BQPO TEW EV SQUIQH QDT OEKH KDYGKU IEBKJYED YI UCDSWQFFXRHS
KYV HLZTB SIFNE WFO ALDGJ FMVI KYV CRQP UFX FW TRVJRI REU PFLI LEZHLV JFCLKZFE ZJ VDETXRGGYSIT
LZW IMAUC TJGOF XGP BMEHK GNWJ LZW DSRQ VGY GX USWKSJ SFV QGMJ MFAIMW KGDMLAGF AK WEFUYSHHZTJU
MAX JNBVD UKHPG YHQ CNFIL HOXK MAX ETSR WHZ HY VTXLTK TGW RHNK NGBJNX LHENMBHG BL XFGVZTIIAUKV
NBY KOCWE VLIQH ZIR DOGJM IPYL NBY FUTS XIA IZ WUYMUL UHX SIOL OHCKOY MIFONCIH CM YGHWAUJJBVLW
  1. 结果放入百度翻译,快速找到目标
    在这里插入图片描述结果:EMNCGAPPHBRC
  2. 将结果放入输入框中验证
    在这里插入图片描述
    参考文档:
    维基百科 Caesar cipher
    百度百科 凯撒密码
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值