当前位置: 首页 > ai >正文

仿射密码的加密与解密

原理

代换密码的另一个特殊情形是仿射密码,它的加密函数定义为 e(x)=(ax+b)mod 26,其中a,b∈Z26 —— 因为这样的函数被称为仿射函数,所以这的密码体制也被称为仿射密码(当a=1时,正好是移位密码)。

为了能对密文进行解密,必须保证所选用的仿射函数是一个单射函数,则对于任意的y∈Z26,同余方程ax+b≡y(mod 26)有唯一解x,并且等价于ax≡y-b(mod 26)。当y遍历Z26时,y-b也遍历Z26,故同余方程有唯一解的充要条件是gcd(a,26)=1。

单射:设f是由集合A到集合B的映射,如果所有x,y∈A,且x≠y,都有f(x)≠f(y),则称f为由A到B的单射 —— 百度百科

gcd:最大公约数

乘法逆:设a∈Zm,若存在a'∈Zm,使得aa'≡a'a≡1(mod m),则a'称为a在上的乘法逆,将其记为a-1mod m。在m是固定的情形下,也可将其简记为a-1

常见格式

仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
加密函数:E(x) = (ax + b) (mod m),其中 a与b互质,其中 a与m互质,m是编码系统中字母的个数(通常都是26)。

解密函数:D(x) = (a'x - b) (mod m),其中 a'是 a 在群的乘法逆元。

加解密算法

def enc(a, b, e):
c = []
for i in e:
temp = ((ord(i) - 97) * a + b) % 26 + 97 
c.append(chr(temp))
print(''.join(c).upper())# 遍历得到a的乘法逆元
def get_are(a):
for i in range(1, 27):
if a * i % 26 == 1:
return i# 解密
def dec(a, b, d):
a_re = get_are(a)
p = []
for i in d:
temp = (((ord(i) - 97) - b) * a_re) % 26 + 97
p.append(chr(temp))
print(''.join(p).upper())

http://www.xdnf.cn/news/5847.html

相关文章:

  • LlamaIndex 第八篇 MilvusVectorStore
  • 【图像处理基石】什么是油画感?
  • rocketMq实例
  • Java Spring MVC -01
  • Feign+Resilience4j实现微服务熔断机制:原理与实战
  • spark Mysql数据库配置
  • 百度导航广告“焊死”东鹏特饮:商业底线失守,用户安全成隐忧
  • YOLO11解决方案之物体模糊探索
  • 【自学30天掌握AI开发】第1天 - 人工智能与大语言模型基础
  • MySQL数据库——视图
  • JavaWeb 开发的核心基础知识
  • Stapi知识框架
  • ubuntu---100条常用命令
  • C++GO语言微服务之数据卷实践
  • 分式注记种表达方式arcgis
  • 大语言模型RLHF训练框架全景解析:OpenRLHF、verl、LLaMA-Factory与SWIFT深度对比
  • 华为海思系列----昇腾张量编译器(ATC)模型转换工具----入门级使用指南(LINUX版)
  • AD PCB布局时常用的操作命令
  • Python作业练习2
  • Go语言——docker-compose部署etcd以及go使用其服务注册
  • Spark处理过程—转换算子
  • 0.66kV0.69kV接地电阻柜常规配置单
  • 仓颉Magic亮相GOSIM AI Paris 2025:掀起开源AI框架新热潮
  • 裸金属服务器 VS 传统物理机
  • 鸿蒙next播放B站视频横屏后的问题
  • Linux之进程控制
  • 【Linux网络】HTTPS
  • k8s v1.26 实战csi-nfs 部署
  • 深度剖析:Vue2 项目兼容第三方库模块格式的终极解决方案
  • 无人机俯视风光摄影Lr调色预设,手机滤镜PS+Lightroom预设下载!