Python实现仿射密码解密:原理与代码解析

追风的人
追风的人
发布时间:2026-10-13| 4人浏览过
原创

本文详解仿射密码的加解密原理,重点解析Python实现过程。通过定义求逆元函数NI,遍历密钥a和b的所有合法组合,批量生成潜在明文。最终结合语言学常识筛选出正确结果,完整展示从密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS”到明文“theres no business like show business”的解密流程。

仿射密码解密任务背景

新学期开设了一门密码学课程,教师在课堂上布置了一道具体的解密练习题。

题目要求解密一段由仿射密码加密的密文,内容为:“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS”。

仿射密码加解密原理

要成功解密该密文,首先需要明确仿射密码的基本定义与工作机制。

仿射密码属于代换密码的一种,其加解密过程遵循特定的数学公式。

加密公式为:C = E([a,b], p) = (ap + b) mod 26,其中C代表密文字母,p代表明文字母,a和b为密钥参数。

解密公式为:p = D([a,b], C) = ((C - b) / a) mod 26,这里需要计算a在模26下的乘法逆元。

Python解密代码实现与逆元计算

由于手动计算所有可能的密钥组合效率极低,因此借助计算机程序进行暴力破解是更可行的方案。以下是使用Python编写的解密代码,运行后需结合语言学知识人工筛选出有意义的明文。此外,解密核心在于求解乘法逆元,因此代码中定义了函数NI来实现这一功能。


#encoding:utf-8

def NI(x,b): #定义求x关于b的逆元的函数NI,其中(NI(x,b)*x) mod b = 1 当x和b互质时求出的逆元唯一
  i = 1
  while (x*i)%b != 1:
    i = i + 1
  return i

c = "DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS"
C = []

#对密文进行预处理并储存在列表中,储存形式是对应字母在26个英文字母中的位序
for i in c:
  if i == ' ':
    C.append(i)
  else:
    C.append(ord(i)-65)

#将加密算法中a可能的取值储存在列表中
a = [3,5,7,9,11,15,17,19,21,23,25]
P = []

for keyb in range(0,26):
  for keya in a:
    ni_a = NI(keya,26)
    for s in C:
      if s == ' ':
        P.append(' ')
      else:
        P.append(((s-keyb)*ni_a)%26) #将明文字母对应的位次码依次加入到明文列表中
    strP = ''
    for t in P:
      if t==' ':
        strP = strP + ' '
      else:
        strP = strP + chr(t+97) #将明文转化为字符串并输出
    print(strP)
    P = []

结果筛选与明文还原

执行脚本后,程序会依次打印出所有可能的明文组合。经过人工比对与语义分析,可以确定其中一行符合英语语法和语义的明文。

最终识别出的明文内容为:“theres no business like show business”。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。