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异步任务队列示例
Apr 01 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
解决Python传递中文参数的问题
Aug 04 Python
python中numpy.zeros(np.zeros)的使用方法
Nov 07 Python
《Python学习手册》学习总结
Jan 17 Python
Python 获取div标签中的文字实例
Dec 20 Python
浅谈Python基础—判断和循环
Mar 22 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
python with (as)语句实例详解
Feb 04 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
python之基数排序的实现
Jul 26 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的FTP学习(三)
2006/10/09 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
vue实现拖拽效果
2019/12/23 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python入门篇之编程习惯与特点
2014/10/17 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
Python urllib3软件包的使用说明
2020/11/18 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
上海微创软件面试题
2012/06/14 面试题
垃圾回收的优点和原理
2014/05/16 面试题
焊接专业毕业生求职信
2013/10/01 职场文书
人力资源专业推荐信
2013/11/29 职场文书
应届生的求职推荐信范文
2013/11/30 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
国际贸易专业求职信
2014/06/04 职场文书
2016大学军训心得体会
2016/01/11 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
react antd实现动态增减表单
2021/06/03 Javascript
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技