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数组条件过滤filter函数使用示例
Jul 22 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
谈谈如何手动释放Python的内存
Dec 17 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 Python
python3正则模块re的使用方法详解
Feb 11 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
Python Parser的用法
May 12 Python
使用tensorflow 实现反向传播求导
May 26 Python
python脚本框架webpy的url映射详解
Nov 20 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通过session防url攻击方法
2014/12/10 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
python实现在目录中查找指定文件的方法
2014/11/11 Python
python使用chardet判断字符串编码的方法
2015/03/13 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
Python标准库之collections包的使用教程
2017/04/27 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
django解决跨域请求的问题
2018/11/11 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
高中生综合素质自我评价
2015/03/06 职场文书
学校办公室主任岗位职责
2015/04/01 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
如何拟写通知正文?
2019/04/02 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫