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 排列组合之itertools
Mar 20 Python
使用Python开发windows GUI程序入门实例
Oct 23 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
python文件的md5加密方法
Apr 06 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
Apr 02 Python
python中使用print输出中文的方法
Jul 16 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
Python argparse模块应用实例解析
Nov 15 Python
Django中使用MySQL5.5的教程
Dec 18 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 Python
Python基于httpx模块实现发送请求
Jul 07 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实现图片上传、剪切功能
2016/05/07 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
限制复选框的最大可选数
2006/07/01 Javascript
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
js function定义函数使用心得
2010/04/15 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
深入研究React中setState源码
2017/11/17 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
PyQt5响应回车事件的方法
2019/06/25 Python
python处理excel绘制雷达图
2019/10/18 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
早餐连锁店计划书
2014/01/08 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
股权转让协议范本
2014/12/07 职场文书
全陪导游词
2015/02/04 职场文书
售票员岗位职责
2015/02/15 职场文书
自我推荐信怎么写
2015/03/24 职场文书
自主招生英文自荐信
2015/03/25 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
Python OpenCV之常用滤波器使用详解
2022/04/07 Python
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js
Python开发五子棋小游戏
2022/04/28 Python