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中使用PIL模块处理图像的教程
Apr 29 Python
Python在Console下显示文本进度条的方法
Feb 14 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
Jul 07 Python
Python设计模式之门面模式简单示例
Jan 09 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python实现括号匹配的思路详解
Aug 23 Python
django DRF图片路径问题的解决方法
Sep 10 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
python多进程并发demo实例解析
Dec 13 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
解决python DataFrame 打印结果不换行问题
Apr 09 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
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
python获取糗百图片代码实例
2013/12/18 Python
Python最长公共子串算法实例
2015/03/07 Python
详解在Python程序中自定义异常的方法
2015/10/16 Python
Python中几种导入模块的方式总结
2017/04/27 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
营销与策划应届生求职信
2013/11/04 职场文书
研究生求职自荐书
2014/06/23 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
个人学习总结范文
2015/02/15 职场文书
机器人瓦力观后感
2015/06/12 职场文书
2015年度女工工作总结
2015/10/22 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js