基于凯撒密码的一个简单改进
- 基于凯撒密码的一个简单改进 推荐度:
- 相关推荐
基于凯撒密码的一个简单改进
写在前面
前几天学习到递归,发现递归的一个经典应用是可以翻转字符串,昨天又看到递归的一个经典难题【第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
"亇耼矦与――廊乊礽昰尲盵箁札旦迒朁
最新文章
- XML的文件是什么
- html5 tooltip,HTML5 教程之CSS 提示工具(Tooltip)
- 可视化小目标
- 强力删除顽固文件夹
- 支付宝通过招行网上银行付钱,最多每笔500块
- .MMAP是什么格式?
- VSS使用帮助2
- 排列组合算法(全排列、全组合)
- 下列c语言表达式能正确表达ch是空格或者回车的是,c语言上机选择题题及答案...
- HashTable详解、源码、扩容、深入理解HashTable、HashTable多线程并发问题
- 类 SimpleDateFormat
- 线性内插interp1函数用法
- extern 用法简单示例
- 微信小程序实现一个简单的倒计时效果
- int.TryParse 方法
- MBRGPT硬盘分区类型属性详解(Win下更改设置OEM恢复分区方法)
- SQL语句注入的全过程