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之PyUnit单元测试实例
Oct 11 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
Python numpy线性代数用法实例解析
Nov 15 Python
Python super()方法原理详解
Mar 31 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
基于Python快速处理PDF表格数据
Jun 03 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 Python
python基于turtle绘制几何图形
Jun 15 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中的函数嵌套层数限制分析
2011/06/13 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
原生js实现放大镜
2017/02/20 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
python网络编程实例简析
2014/09/26 Python
详解Django中的权限和组以及消息
2015/07/23 Python
python简单实现AES加密和解密
2019/03/28 Python
python3实现弹弹球小游戏
2019/11/25 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python list和str互转的实现示例
2020/11/16 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
事务机电主管工作职责
2014/02/25 职场文书
天地会口号
2014/06/17 职场文书
工作目标责任书
2014/07/23 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android