仿射密码解密(Affine Cipher)

2024-01-06 13:08

本文主要是介绍仿射密码解密(Affine Cipher),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

仿射密码解密(Affine Cipher)

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

ABCDEFGHIJKLMNOPQRSTUVWXYZ
012345678910111213141516171819202122232425

加密函数:E(x) = (ax + b) (mod m),其中 a与b互质,m是编码系统中字母的个数(通常都是26)。

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

下面就要介绍一下什么叫做乘法逆元:emmmmmm,好吧,我也不会,没看懂。

这是网上关于使用欧几里得算法求解乘法逆元——Python的代码:(我是一个勤劳的搬运工,不要夸我^_^)

  1. #欧几里德算法求最大公约数
  2. def get_gcd(a, b):
  3. k = a // b
  4. remainder = a % b
  5. while remainder != 0:
  6. a = b
  7. b = remainder
  8. k = a // b
  9. remainder = a % b
  10. return b
  11. #改进欧几里得算法求线性方程的x与y
  12. def get_(a, b):
  13. if b == 0:
  14. return 1, 0
  15. else:
  16. k = a // b
  17. remainder = a % b
  18. x1, y1 = get_(b, remainder)
  19. x, y = y1, x1 - k * y1
  20. return x, y
  21. a = input('a:')
  22. b = input('b:')
  23. a, b = int(a), int(b)
  24. #将初始b的绝对值进行保存
  25. if b < 0:
  26. m = abs(b)
  27. else:
  28. m = b
  29. flag = get_gcd(a, b)
  30. #判断最大公约数是否为1,若不是则没有逆元
  31. if flag == 1:
  32. x, y = get_(a, b)
  33. x0 = x % m #对于Python '%'就是求模运算,因此不需要'+m'
  34. print("所求的逆元:",x0) #x0就是所求的逆元
  35. else:
  36. print("Do not have!")

比如求5关于模26的乘法逆元

 

下面举个例子,求解仿射密码(搬运工上线...):

我们以 E(x)=(5x+8) mod 26函数为例子进行介绍,加密字符串为 AFFINECIPHER,这里我们直接采用字母表26个字母作为编码系统

密文就是IHHWVCSWFRCP。

解密过程:

  1. 先求解5关于模26的乘法逆元,为21
  2. 解密函数就是D(x) = 21(x - 8) mod 26 
  3. 解密如下

 下面是关于求仿射密码的python3脚本(自己写的,有错请指正):

  1. #仿射密码解密
  2. #改进欧几里得算法求线性方程的x与y
  3. def get(a, b):
  4. if b == 0:
  5. return 1, 0
  6. else:
  7. k = a //b
  8. remainder = a % b
  9. x1, y1 = get(b, remainder)
  10. x, y =y1, x1 - k * y1
  11. return x, y
  12. s = input("请输入解密字符:").upper()
  13. a = int(input("请输入a:"))
  14. b = int(input("请输入b:"))
  15. #求a关于26的乘法逆元
  16. x, y = get(a, 26)
  17. a1 = x % 26
  18. l= len(s)
  19. for i in range(l):
  20. cipher = a1 * (ord(s[i])- 65 - b) % 26
  21. res=chr(cipher + 65)
  22. print(res, end='')

这篇关于仿射密码解密(Affine Cipher)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576454

相关文章

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3