密码学—仿射密码Python程序
仿射密码
古典密码,且属于单表加密。
加密算法
仿射密码公式
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程序的更多相关文章
- 仿射密码Python实现
算法分析 仿射密码结合了移位密码和乘数密码的特点,是移位密码和乘数密码的组合. 仿射密码的加密算法就是一个线性变化,即对明文字符x,对应的密文字符为y=ax+b(mod26)其中,a, b属于Z26且 ...
- 使用Python解密仿射密码
新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS” 想解密这个密文,首先必须要知道仿 ...
- 仿射密码-fanfie--affine
仿射密码 仿射密码 是一种专情密码,一对一替换 ~~ 加密函数是 e(x) = ax + b (mod m) 其中a和m 互质,m是字母的数目. 解码函数是 d(x) = a^-1(x - b) (m ...
- Python:使用Kivy将python程序打包为apk文件
1.概述 Kivy是一套Python下的跨平台开源应用开发框架,官网,我们可以用 它来将Python程序打包为安卓的apk安装文件.以下是在windows环境中使用. 安装和配置的过程中会下载很多东西 ...
- 想拥有自己的Python程序包,你只需15步
来源商业新知网,原标题:15步,你就能拥有自己的Python程序包 全文共 3192 字,预计学习时长 6 分钟 每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇 Python开源程序包的制作 ...
- Windows系统中设置Python程序定时运行方法
Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...
- Python学习笔记一:第一个Python程序,变量,字符编码与二进制,用户交互程序
第一个python程序 Windows:设置环境变量,X:\pthonxxx,xxx是版本号 在命令提示符下 输入python,进入解释器 >>>print(“Hello World ...
- 如何把自己写的python程序给别人用
这里讲的给别人用,不是指将你的代码开源,也不是指给另一个程序员用..... 前段时间写了个程序,输入URP学生系统的账号和密码,输出课表.绩点之类的信息,想给同学用,但是总不能叫别人也去装python ...
- 远程编写+调试服务器上的Python程序
原帖参见(需自备梯子):https://webcache.googleusercontent.com/search?q=cache:1htdR2EXj5wJ:https://www.digitaloc ...
- 有待总结的KMP算法 sdut oj 2463 学密码学一定得学程序
学密码学一定得学程序 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 曾经,ZYJ同学非常喜欢密码 学.有一天,他发现了一个很长很 ...
随机推荐
- #根号分治,分块,dfs序#洛谷 7710 [Ynoi2077] stdmxeypz
题目传送门 分析 首先把距离变成深度,用dfs序转成区间问题,考虑分块,散块直接改 问题是整块,如果模数比较大,可以以深度为第一维下标差分标记,这样查询时就可以前缀和知道答案 如果模数比较小,那么给该 ...
- #博弈论#Poj 1740 A New Stone Game
题目 两个人轮流操作,每次选择一个非空石堆后, 选择扔掉至少一个石子后可将剩余石子任意移动至其余非空石堆, 也可以不移,无石子可取者为败,问先手是否必胜 分析 感性理解一下,如果有两堆个数相同的石子, ...
- centos环境tomcat配置SSL
环境: centos7.9 tomcat9 jdk1.8 一.阿里云申请 免费SSL 按照官网的方法并未成功启动! 443 80端口加入安全组 阿里云申请免费ssl 下载后解压将localhost-r ...
- HarmonyOS数据管理与应用数据持久化(二)
通过键值型数据库实现数据持久化 场景介绍 键值型数据库存储键值对形式的数据,当需要存储的数据没有复杂的关系模型,比如存储商品名称及对应价格.员工工号及今日是否已出勤等,由于数据复杂度低,更容易兼容不同 ...
- SpringCloud整体架构概览
什么是SpringCloud #目标 协调任何服务,简化分布式系统开发. #简介 构建分布式系统不应该是复杂的,SpringCloud对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性 ...
- mysql 必知必会整理—子查询与连接表[八]
前言 简单介绍一下子查询与连接表. 正文 什么是子查询呢? 列出订购物品TNT2的所有客户. select cust_id from orders where order_num IN (SELECT ...
- spring cloud 学习笔记 基础工程的构建(一)
前言 学习一下spring cloud,只是过一遍微服务的一些现代化工具,微服务其实一直都存在,去公司的时候发现一个问题,即使有些项目没有用到现代这些什么docker.k8s,其实也是微服务,微服务一 ...
- 推荐一个计算Grad-CAM的Python库
前言 类激活图CAM(class activation mapping)用于可视化深度学习模型的感兴趣区域,增加了神经网络的可解释性.现在常用Grad-CAM可视化,Grad-CAM基于梯度计算激活图 ...
- C++ 类方法解析:内外定义、参数、访问控制与静态方法详解
C++ 类方法 类方法,也称为成员函数,是属于类的函数.它们用于操作或查询类数据,并封装在类定义中.类方法可以分为两种类型: 类内定义方法: 直接在类定义内部声明和定义方法. 类外定义方法: 在类定义 ...
- 推荐一波微软家的浏览器:EDGE
前段时间英雄联盟(LOL)队伍 EDG 夺冠成为热门事件,上了各大热搜,即使大家不玩英雄联盟,相信也多多少少有听说相关信息吧! 今天我们的主角并不是 EDG,而是微软的新版浏览器 EDGE !!! 微 ...