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

时间: 2024-11-10 admin IT培训

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

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

写在前面

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

正文开始

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

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

  • 下面通过Python代码实现:

'''【递归的经典应用】翻转字符串'''
def reverse_str(strr):if strr == '':return strrelse: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
"亇耼矦与――廊乊礽昰尲盵箁札旦迒朁