基于凯撒密码的一个简单改进

写在前面

前几天学习到递归,发现递归的一个经典应用是可以翻转字符串,昨天又看到递归的一个经典难题【第k个语言符号】,在力扣上翻着答案想到凯撒密码,于是又突发奇想结合两者写个模仿凯撒密码的加密算法。于是便有了本文。

正文开始

  • 加密原理:
    1.将字符串原地翻转;
    2.把第一个单词放到最后;
    3.把字符串中所有字符的ASCII码加一;

  • 哈哈哈是不是很简单,这样就得到了一个加密的密钥,同样的基于此原理可以实现解密。

  • 下面通过Python代码实现:

'''【递归的经典应用】翻转字符串'''
def reverse_str(strr):
    if strr == '':
        return strr
    else:
        return reverse_str(strr[1:]) + strr[0]
        
''' 加密算法 '''
def encrypt_str(strr):
    list1 = reverse_str(strr).split() # 将字符串翻转并按单词切分为列表
    list2 = list1[1:] # 将列表从第二个单词开始赋值给新列表,再把第一个单词插入最后
    list2.append(list1[0])
    strr = ' '.join(list2) # 将列表还原回字符串
    str2 = ''
    for s in strr: 
        str2 = str2 + chr(ord(s) + 1) # ord()把字符转换为对应的ASCII码,chr相反
    print("你的密文是:",str2,sep='')
    
''' 解密算法 '''
def decrypt_str(strr):
    str2 = '' # 先按字符串的ASCII码把字符串还原回来
    for s in strr:
        str2 = str2 + chr(ord(s) - 1)
    list1 = str2.split() # 接着就是上面的反过程了
    list2 = list1[:-1]
    list2.insert(0,list1[-1])
    strr = ' '.join(list2)
    strr = reverse_str(strr)
    print("密钥对应的明文是:",strr,sep='')

encrypt_str(input("请输入要加密的字符串:"))
decrypt_str(input("请输入密钥:"))
  • 测试结果
中文测试:
请输入要加密的字符串:莫古134不打代码
你的密文是:砂令扔与542句莬
请输入密钥:砂令扔与542句莬
密钥对应的明文是:莫古134不打代码

英文测试:
请输入要加密的字符串:MoGu134 don't want to write code.
你的密文是:fujsx!pu!uobx!u(ope!542vHpN!/fepd
请输入密钥:fujsx!pu!uobx!u(ope!542vHpN!/fepd
密钥对应的明文是:MoGu134 don't want to write code.

写在后面

  • 是不是很好玩?留给各位一个密钥,看有没有人可以破解出来hhh
"亇耼矦与――廊乊礽昰尲盵箁札旦迒朁
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值