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算法之栈(stack)的实现
Aug 18 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
pygame实现简易飞机大战
Sep 11 Python
python实现批量视频分帧、保存视频帧
May 31 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
django的model操作汇整详解
Jul 26 Python
python 实现视频 图像帧提取
Dec 10 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
Python基于os.environ从windows获取环境变量
Jun 09 Python
Python爬虫基础之爬虫的分类知识总结
May 13 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
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
es6基础学习之解构赋值
2018/12/10 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
2018/04/28 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
安全生产月活动总结
2014/05/04 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
鲁迅故居导游词
2015/02/05 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
Go timer如何调度
2021/06/09 Golang
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android
python全面解析接口返回数据
2022/02/12 Python