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开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
深入解析Python中的上下文管理器
Jun 28 Python
python GUI实例学习
Nov 21 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
Python常用模块之requests模块用法分析
May 15 Python
Python命令行click参数用法解析
Dec 19 Python
pytorch中的inference使用实例
Feb 20 Python
python同时遍历两个list用法说明
May 02 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
关于python爬虫应用urllib库作用分析
Sep 04 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中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
微信支付扫码支付php版
2016/07/22 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
深入了解js原型模式
2019/05/30 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
ptyhon实现sitemap生成示例
2014/03/30 Python
python保存字符串到文件的方法
2015/07/01 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
商务英语毕业生自荐信范文
2013/11/08 职场文书
党员批评与自我批评
2014/10/15 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
开学第一周值周总结
2015/07/16 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
深入理解Vue的数据响应式
2021/05/15 Vue.js
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python
GPU服务器的多用户配置方法
2022/07/07 Servers