Python实现仿射密码的思路详解


Posted in Python onApril 23, 2020

仿射密码思路:

1、加解密公式:

Python实现仿射密码的思路详解

2、构造对应字典:

Python实现仿射密码的思路详解

3、代码实现

构造字典,建立映射关系:

# 构造字典,'A' --> 0 ...
def char_2_num(x):
  list_s = []
  list_num = []
  for i in range(26):
    c = chr(i + 65)
    list_s.append(c)
    list_num.append(i)
  c_2_n = dict(map(lambda x, y: [x, y], list_s, list_num))
  return c_2_n[f'{x}']


# 构造字典,0 ---> 'A' ...
def num_2_char(x):
  list_s = []
  list_num = []
  for i in range(26):
    c = chr(i + 65)
    list_s.append(c)
    list_num.append(i)
  n_2_c = dict(map(lambda x, y: [x, y], list_num, list_s))
  print(n_2_c[x],end='')

实现加密:

# 编码
def encode():
  s = input('输入需要编码的字符: ')
  print('编码后的结果为: ',end='')
  for j in s:
    if j.isspace():
      print(' ',end='')
    else:
      ek = a * char_2_num(j) + b
      result = ek % 26
      num_2_char(result)

求模26下a的逆,实现解密:

# 求模26下a的逆
def inv_(x):
  for inv_a in range(1,26,2):
    for j in range(27):
      if x * inv_a == 26 * j + 1:
        return inv_a

# 解码
def decode():
  s = input('输入需要解码的字符: ')
  print('解码后的结果为: ',end='')
  for j in s:
    if j.isspace():
      print(' ',end='')
    else:
      dk = inv_(a) * (char_2_num(j) - b)
      result = dk % 26
      num_2_char(result)

函数入口:

# 输入指令
answer = input(f'请输入所需的操作:编码/E or 解码/D: ')

# 输入参数a,b
a = int(input('请输入a:'))
b = int(input('请输入b: '))

try:
  if answer.upper() == 'E':
    encode()
  elif answer.upper() =='D':
    decode()
  else:
    print('输入错误!')
except KeyError:
  print('请正确输入大写字母!')

加密效果:

请输入所需的操作:编码/E or 解码/D:  E
请输入a:5
请输入b: 7
输入需要编码的字符: TODAY IS SO HOT
编码后的结果为: YZWHX VT TZ QZY

解密效果:

请输入所需的操作:编码/E or 解码/D:  D
请输入a:5
请输入b: 7
输入需要解码的字符: YZWHX VT TZ QZY
解码后的结果为: TODAY IS SO HOT

到此这篇关于Python实现仿射密码的思路详解的文章就介绍到这了,更多相关python 仿射密码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python的即时标记项目练习笔记
Sep 18 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
Python递归遍历列表及输出的实现方法
May 19 Python
Python实现注册登录系统
Aug 08 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
Python中单例模式总结
Feb 20 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Python之——生成动态路由轨迹图的实例
Nov 22 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
python实现人机猜拳小游戏
Feb 03 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 #Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 #Python
使用matplotlib动态刷新指定曲线实例
Apr 23 #Python
Flask模板引擎Jinja2使用实例
Apr 23 #Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 #Python
在matplotlib中改变figure的布局和大小实例
Apr 23 #Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 #Python
You might like
BBS(php & mysql)完整版(五)
2006/10/09 PHP
PHP安全配置详细说明
2011/09/26 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
菜鸟javascript基础整理1
2010/12/06 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
python中私有函数调用方法解密
2016/04/29 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
大学同学聚会邀请函
2014/01/19 职场文书
服装创业计划书范文
2014/02/05 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
spring cloud 配置中心native配置方式
2021/09/25 Java/Android