仿射密码

古典密码,且属于单表加密。

加密算法

  • 仿射密码公式
    c = m×k + b mod 26

    • c是密文,m是明文,m作为26字母中的明文,因此计算出来的密文要模26
    • 仿射密码是对单个字母加密,因此加密文本的时候会采用循环加密
  • k
    k在放射密码中作为乘数

    • k要与b要互素
    • 因为k要做乘数,所以必须要和26互素,否则加密失败
  • b
    b在放射密码中作为加数

    • b要与k互素
key_k = 9
key_b = 7
cipher = [] #存放对应的密文数字
p = 26
mess = 'abc'
for ch in mess: # 首先将所有信息转化为大写字母, 非字母的不进入存储
if ord('A') <= ord(ch) <= ord('Z') \
or ord('a') <= ord(ch) <= ord('z'):
temp_num = ((ord(ch.upper()) - ord('A')) * key_k + key_b) % p
cipher.append(temp_num)
print(cipher)
mess = ''
#将转化出来的密文数字转为加密后的密文字母并打印出来
for i in cipher:
mess+=chr(i+ord('A'))
print(mess)

解密算法


x = 0
y = 0 #计算模运算
def ext_gcd(a, b):
global x
global y
if (b == 0):
x = 1
y = 0
return a
res = ext_gcd(b, a % b)
x1 = x
x = y
y = x1 - a // b * y
return res # //线性方程 ax + by = m,当m是gcd(a.b)的倍数时有解 #求解线性方程解
def linearEquation(a, b, m):
global x
global y
d = ext_gcd(a, b)
if (m % d != 0):
print("无解")
return
else:
n = m // d
x *= n;
y *= n; return x, y
  • 仿射密码解密全过程
    (这里用到了上面两个函数,记得拷贝上面的代码再用下面的)


key_k = 9
key_b = 7
cipher = 'HQZ'
p = 26
deCipher = []
temp = 0
dit = linearEquation(key_k, p, math.gcd(key_k, p))
key_k_1 = dit[0]
print('k的逆:', key_k_1)
for ch in cipher:
if ord('A') <= ord(ch) <= ord('Z') \
or ord('a') <= ord(ch) <= ord('z'):
temp = ((ord(ch.upper()) - ord('A') - key_b) * key_k_1) % p
deCipher.append(temp)
message = ''
# 输出
for i in deCipher:
message += chr(i + ord('A'))
print(message)

密码学—仿射密码Python程序的更多相关文章

  1. 仿射密码Python实现

    算法分析 仿射密码结合了移位密码和乘数密码的特点,是移位密码和乘数密码的组合. 仿射密码的加密算法就是一个线性变化,即对明文字符x,对应的密文字符为y=ax+b(mod26)其中,a, b属于Z26且 ...

  2. 使用Python解密仿射密码

    新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS” 想解密这个密文,首先必须要知道仿 ...

  3. 仿射密码-fanfie--affine

    仿射密码 仿射密码 是一种专情密码,一对一替换 ~~ 加密函数是 e(x) = ax + b (mod m) 其中a和m 互质,m是字母的数目. 解码函数是 d(x) = a^-1(x - b) (m ...

  4. Python:使用Kivy将python程序打包为apk文件

    1.概述 Kivy是一套Python下的跨平台开源应用开发框架,官网,我们可以用 它来将Python程序打包为安卓的apk安装文件.以下是在windows环境中使用. 安装和配置的过程中会下载很多东西 ...

  5. 想拥有自己的Python程序包,你只需15步

    来源商业新知网,原标题:15步,你就能拥有自己的Python程序包 全文共 3192 字,预计学习时长 6 分钟 每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇 Python开源程序包的制作 ...

  6. Windows系统中设置Python程序定时运行方法

    Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...

  7. Python学习笔记一:第一个Python程序,变量,字符编码与二进制,用户交互程序

    第一个python程序 Windows:设置环境变量,X:\pthonxxx,xxx是版本号 在命令提示符下 输入python,进入解释器 >>>print(“Hello World ...

  8. 如何把自己写的python程序给别人用

    这里讲的给别人用,不是指将你的代码开源,也不是指给另一个程序员用..... 前段时间写了个程序,输入URP学生系统的账号和密码,输出课表.绩点之类的信息,想给同学用,但是总不能叫别人也去装python ...

  9. 远程编写+调试服务器上的Python程序

    原帖参见(需自备梯子):https://webcache.googleusercontent.com/search?q=cache:1htdR2EXj5wJ:https://www.digitaloc ...

  10. 有待总结的KMP算法 sdut oj 2463 学密码学一定得学程序

    学密码学一定得学程序 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 曾经,ZYJ同学非常喜欢密码 学.有一天,他发现了一个很长很 ...

随机推荐

  1. PWA 实践/应用(Google Workbox)

    桌面端 PWA 应用: 移动端添加到桌面: 1 什么是 PWA PWA(Progressive Web App - 渐进式网页应用)是一种理念,由 Google Chrome 在 2015 年提出.P ...

  2. 深入理解HashMap和TreeMap的区别

    目录 简介 HashMap和TreeMap本质区别 排序区别 Null值的区别 性能区别 共同点 深入理解HashMap和TreeMap的区别 简介 HashMap和TreeMap是Map家族中非常常 ...

  3. 这一次,让我们一起来搞懂MySQL

    欢迎加入我的专栏,和我一起开始 MySQL 学习之旅. 从日常的开发和优化中,一步步地从一个数据库小白成为 MySQL 调优的开发人员.回想起来,从我第一次带创建索引至今,已经有十个年头了.在这个过程 ...

  4. Windows wsl2安装Ubuntu

    wsl(Windows Subsystem for Linux)即适用于Windows的Linux子系统,是一个实现在Windows 10 / 11上运行原生Linux的技术. wsl2 为其迭代版本 ...

  5. 【FAQ】获取Push Token失败,如何进行排查?

    一. 获取Push Token的方式 获取Push Token有两种方式:一种是调用getToken方法向Push服务端请求Token,当getToken方法返回为空时,Token可通过onNewTo ...

  6. linux上操作 压缩包 的命令

    # tar.gz 解压缩 # 解压 tar -zxvf a.tar.gz # 压缩 tar -zcvf a.atr.gz a # zip 解压缩 # 压缩 zip -vr a.zip a/* # 解压 ...

  7. openGauss社区入门(openGauss-常用数据类型)

    常用数据类型 数据类型 说明 布尔类型 boolean true/'1'/'yes' false/'0'/'no' 数值类型 smallint 两字节 int 4 字节 bigint 8 字节 dou ...

  8. HarmonyOS:Neural Network Runtime对接AI推理框架开发指导

      场景介绍 Neural Network Runtime作为AI推理引擎和加速芯片的桥梁,为AI推理引擎提供精简的Native接口,满足推理引擎通过加速芯片执行端到端推理的需求. 本文以图1展示的A ...

  9. Matplotlib Installing an official release from resources 源码安装Matplotlib官方版本

    Installation Installing an official release Matplotlib releases are available as wheel packages for ...

  10. JavaSE--初识&&开发基础

    JDK.JRE.JVM JDK:Java Development Kit java开发环境 JRE:Java Runtime Environment java运行时环境 JVM:JAVA Virtua ...