Python字符串的加密与解密

使用凯撒密码实现加密解密

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

#加密
a=input()
for i in range(len(a)):
    if ord('a')<=ord(a[i])<=ord('z'):
        print(chr((ord(a[i])+3-ord('a'))%26+ord('a')),end="")
    elif ord('A')<=ord(a[i])<=ord('Z'):
        print(chr((ord(a[i])+3-ord('A'))%26+ord('A')),end="")
    else:
        print(a[i],end="")

#解密
etxt = input('')
for p in etxt:
    if 'a' <= p <= 'z':
        print(chr(ord('a')+(ord(p)-ord('a')-3)%26), end='')
    elif 'A' <= p <= 'Z':
        print(chr(ord('A')+(ord(p)-ord('A')-3)%26), end='')
    else:
        print(p, end='')

原文:dtuhgc
加密后:gwxkjf

恺撒密码也是一种非常容易破解的加密方式。可能有两种情况需要考虑:

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

(2)攻击者知道(或者猜测)使用了恺撒密码,但是不知道其偏移量。

对于第一种情况,攻击者可以通过使用诸如频率分析或者样式单词分析的方法, [3]
 马上就能从分析结果中看出规律,得出加密者使用的是恺撒密码。

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

当然,我们也可以让字符串加密后不像传统中凯撒加密后得到的结果.举例如下:

​
do=input()
#encrypt:1    decrypt:0    test input:zaqwwertfyu    test output:[125, 100, 116, 122, 122, 104, 117, 119, 105, 124, 120]
def enc():
    plaintext=input('input string to encrypt \t') 
    dis=int(input('input distance \t'))    
    pyout=[]
    for ch in plaintext:
        ordvalue=ord(ch)
        ciphervalue=ordvalue+dis
        pyout+=[ciphervalue]
    return pyout

def dec():
    codetext=eval(input('input code to decrypt \t')) 
    dis0=int(input('input distance \t'))  
    textout=''
    for ch0 in codetext:
        ciphervalue=ch0-dis0
        pyoutstr=chr(ciphervalue)
        textout+=(pyoutstr)
    return textout

if do =='1':
    print(enc())
else:
    print(dec())

​

当然了,它只能加密英语字符串.

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值