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通过openpyxl生成Excel文件的方法
May 12 Python
python基础教程之Filter使用方法
Jan 17 Python
Python与Java间Socket通信实例代码
Mar 06 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
python+mysql实现教务管理系统
Feb 20 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
Python中的全局变量如何理解
Jun 04 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 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用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
js类 from qq
2006/11/13 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
js日历功能对象
2012/01/12 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
jQuery实现推拉门效果
2020/10/19 jQuery
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
Python 字符串定义
2009/09/25 Python
Python中使用中文的方法
2011/02/19 Python
python自定义异常实例详解
2017/07/11 Python
Python3中的bytes和str类型详解
2019/05/02 Python
Django框架反向解析操作详解
2019/11/28 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
详解python中的异常捕获
2020/12/15 Python
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
五一服装活动方案
2014/01/11 职场文书
就业协议书范本
2014/04/11 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript