【密码学】面向小白的古典密码基础入门笔记

目录

Mindmap 

前言

破译方法

三类古典密码

替换密码

分类

单表替换密码 

凯撒密码

简单替换密码

仿射密码

普莱费尔密码

培根密码

猪圈密码

摩斯密码

多表替换密码

维吉尼亚密码

移位密码

滚筒密码

栅栏密码


Mindmap 

前言

1.所有古典密码都已不安全

2.密钥空间应该尽量大

3.密文应该扰乱统计规律

4.效率和安全是矛盾的

破译方法

1.穷举法:尝试所有密钥

2.分析法:确定性分析(数学公式);统计分析

三类古典密码

古典密码学中的替换密码,移位密码和机械密码是三种基本的加密技术,它们在实现原理和加密方法上有所不同:

  1. 替换密码

    • 定义:替换密码是一种通过将明文中的每个字符替换为另一个字符或符号来进行加密的技术。
    • 特点:最简单的替换密码是凯撒密码,其中明文字母按照一个固定的偏移量进行替换。其他替换密码可能使用更复杂的置换表,例如维吉尼亚密码就是使用多个凯撒密码表组成的多表替换密码。
  2. 移位密码

    • 定义:移位密码是一种替换密码的特例,其中每个明文字符按照固定的偏移量(位移)来替换。也称为凯撒密码。
    • 特点:凯撒密码中,明文的每个字母按照一个固定的偏移量向右(或向左)移动,例如偏移量为3的凯撒密码将'A'替换为'D','B'替换为'E',以此类推。移位密码属于替换密码的一种简单形式,易于实现,但安全性较低。
  3. 机械密码

    • 定义:机械密码是使用机械装置(通常是基于物理结构的装置)来实现加密和解密的密码系统。
    • 特点:机械密码通常涉及转轮、齿轮或其他物理结构,这些结构可以根据密钥或密码来调整,从而实现字符的替换或转换。最著名的例子是恩尼格玛机(Enigma machine),它在二战期间被纳粹德国用作加密通信的工具。

总结

  • 替换密码是通过替换明文中的字符来实现加密,可以是简单的移位替换,也可以是更复杂的多表替换。
  • 移位密码是替换密码的一种特例,其中每个字符按照一个固定的位移量进行替换。
  • 机械密码利用物理结构实现加密,通常比纯文本替换更复杂,提供了更高的加密强度和安全性。

替换密码

分类

  1. 单表替换密码

    • 定义:单表替换密码是指通过一个固定的替换表(例如字母表的置换表)来加密明文。最著名的例子是凯撒密码,其中字母表中的每个字母都按照一个固定的偏移量进行替换。
    • 特点:单表替换密码的加密过程是简单的替换操作,每个明文字符(或者字符块)都对应一个唯一的密文字符(或者字符块)。这种方法容易实现和理解,但由于固定的替换表,安全性较低,容易受到频率分析等攻击。
  2. 多表替换密码

    • 定义:多表替换密码是一种使用多个替换表(也称为秘钥表)的加密技术。加密时,根据密钥中的某种规则(如轮换、随机选择等),选择合适的替换表进行加密。
    • 特点:多表替换密码提高了安全性,因为不同的明文字符(或者字符块)可以映射到不同的密文字符(或者字符块),且同一个明文在不同的加密情况下可能对应不同的密文。这种方法可以抵抗频率分析等简单攻击,但仍然可能受到更复杂的密码分析攻击。

单表替换密码 

凯撒密码

这是一种替换加密技术,其中每个字母在字母表中移动固定数目的位置。例如,如果我们设定移动3个位置,那么'A'会变成'D','B'会变成'E',依此类推。一个例子是,加密“HELLO”时,每个字母都移动3个位置,结果是“KHOOR”。

简单替换密码

在这种加密方法中,字母表中的每个字母都被系统地替换为另一个字母。例如,我们可以决定将'A'替换为'D','B'替换为'E',等等,但替换是随机的,不像凯撒密码那样规律。例如,用一种特定替换规则加密“SIMPLE”可能得到“JKBCDE”。

仿射密码

这是一种使用数学函数的替换密码,具体公式为 (E(x) = (ax + b) \mod m),其中(m)是字母表中的字符数量,(a)和(b)是密钥,且(a)和(m)必须互质。例如,假设(a=5),(b=8),加密字母‘A’(设‘A’为0)的结果是(E(0) = (5*0 + 8) \mod 26 = 8),所以‘A’被加密为‘I’。

加密公式

给定明文 ( x )(其中 ( x ) 是字母在字母表中的位置,从 0 开始计算),加密函数 ( E ) 可表示为: [ E(x) = (ax + b) \mod m ] 这里的 ( m ) 是字母表中字母的总数(通常是 26),( a ) 和 ( b ) 是密钥,其中 ( a ) 必须和 ( m ) 互质(即 ( a ) 和 ( m ) 的最大公约数为 1,保证 ( a ) 在模 ( m ) 下有逆元)。

解密公式

解密是加密的逆过程。设密文 ( y ) 是通过上述加密公式得到的,解密函数 ( D ) 可表示为: [ D(y) = a^{-1}(y - b) \mod m ] 这里的 ( a^{-1} ) 是 ( a ) 在模 ( m ) 下的乘法逆元,意味着 ( a \cdot a^{-1} \equiv 1 \mod m )。计算 ( a^{-1} ) 通常可以通过扩展欧几里得算法来实现。

示例

假设我们使用 ( m = 26 ),( a = 5 ),( b = 8 ),并且要加密字母 ‘A’(记为 ( x = 0 )):

  1. 加密过程: [ E(0) = (5 \times 0 + 8) \mod 26 = 8 ] 所以 ‘A’ 加密后变成位置为 8 的字母,即 ‘I’。

  2. 解密过程: 首先,我们需要找到 5 的逆元。假设找到 ( 5^{-1} = 21 ),那么: [ D(8) = 21 \times (8 - 8) \mod 26 = 0 ] 因此,位置 8 的字母(即 ‘I’)解密后变回 ‘A’。

仿射密码的安全性在于选择合适的 ( a ) 和 ( b ),以及保持这些值的秘密。但在现代密码学中,由于其线性特性和限定的密钥空间,它被认为是较弱的加密方法。

普莱费尔密码

普莱费尔密码(Playfair Cipher)是一种使用5x5矩阵对成对字母进行加密的经典替换密码系统。它在19世纪由查尔斯·惠斯通发明,并以其朋友查尔斯·普莱费尔的名字命名。这种密码比单一替换密码更为复杂,因为它加密的是字母对,而不是单个字母。以下是普莱费尔密码的基本加密规则:

  1. 准备密钥方阵:首先选择一个密钥词(通常去除重复字母),将其字母按顺序填入5x5的方阵中,剩余的格子按字母表顺序填充,未使用的字母继续填充,通常将字母“I”和“J”视为相同,以适应25个格子。

  2. 准备明文:将明文分为字母对,如果有一个字母单独存在,则添加一个额外的字母(如'X'或'Q')使其成对。如果一对字母相同,则插入一个填充字母如'X',例如“HELLO”变为“HE LX LO”。

  3. 加密规则:对每对字母应用以下规则:

    • 如果字母对在同一行:对每个字母,用其右侧的字母替换(如果是行尾,则换到行首)。
    • 如果字母对在同一列:对每个字母,用其下方的字母替换(如果是列底,则换到列顶)。
    • 如果字母对在不同行不同列:字母对在方阵中形成一个矩形,用同行对角的字母进行替换,即保持行不变,交换列。

培根密码

这种密码将每个字母编码为一系列的'A'和'B'。例如,'A'可以编码为“AAAAA”,'B'为“AAAAB”,等等。密文通常看起来是无意义的,但通过特定的编码规则可以解码出原文。

猪圈密码

这种加密方法使用一系列的符号来代表字母,通常是在两个或三个不同的圆形图案中画分割线来表示。每个符号代表一个特定的字母,根据符号的形状和位置确定。

摩斯密码

这是一种早期的电报代码,使用短信号(点)和长信号(划)以及间隔来表示字母、数字和标点符号。例如,“SOS”在摩斯密码中表示为“··· --- ···”。

多表替换密码

维吉尼亚密码

维吉尼亚密码可以通过一个方便的密码表来实现加密和解密过程,这种表也被称为“维吉尼亚方阵”。这个方阵包含了26行26列的字母,每一行字母都向左或向右移动一位,从而形成了一个完整的字母表的移位序列。

维吉尼亚方阵的构建

密码表的每一行都是从前一行的最后一个字母开始,继续按照字母顺序排列。例如:

  • 第一行从 A 开始,依次排列到 Z。
  • 第二行从 B 开始,依次排列到 A。
  • 第三行从 C 开始,依次排列到 B。 依此类推,直到整个表格完成。

加密过程

使用维吉尼亚密码表进行加密时:

  1. 确定密钥:选择一个密钥。
  2. 重复密钥:将密钥重复至与明文长度相同。
  3. 使用密码表:找到明文中每个字符在表的顶部的列,密钥中对应字符在表的左侧的行。在行列交叉点的字母即为加密后的字符。

解密过程

解密与加密相反:

  1. 找到密文中的每个字符在表中的列。
  2. 找到密钥对应字符在表的左侧的行。
  3. 在该行中找到密文字符,然后跟随这一列向上直到表格的顶端,顶端的字母是明文中对应的字符。

这个方法使得加密和解密过程非常直观,并且易于通过手工或使用简单程序来实现。通过使用密码表,维吉尼亚密码的实现可以更为清晰且容易操作。

 

移位密码

滚筒密码

滚筒密码是古希腊时期的斯巴达人使用的一种加密技术。这种方法涉及到一块长条的皮革或羊皮纸和一个木制的滚筒。加密过程如下:

  1. 绑定:将长条的纸或皮革绕在滚筒上。
  2. 书写:在纸条上沿着滚筒的长度方向书写信息。
  3. 解开:当纸条从滚筒上解开后,原来的信息会被打乱,因为原文是沿着滚筒的轴向书写的。
  4. 传递和解读:纸条被送到接收者那里,接收者需要一个直径相同的滚筒才能重新绕上去,从而阅读信息。

滚筒密码的安全性依赖于滚筒的直径和用于绑定的材料的宽度。只有当拥有正确直径的滚筒时,接收者才能正确地解读信息。

栅栏密码

栅栏密码是一种简单的置换密码,用于通过重新排列字母的顺序来加密文本。它的基本操作如下:

  1. 写法:将文本字符顺序写入分成几行的“栅栏”结构中。例如,如果我们选择两行栅栏,第一个字母放在第一行,第二个字母放在第二行,第三个字母再回到第一行,依此类推。
  2. 读取:加密时按行读取字符。首先读取第一行的所有字符,然后读取第二行的所有字符,如果有更多行也按此方法继续。
  3. 解密:接收者按相同的行数重建栅栏结构,然后按写入时的Z字形或N字形路径重新填写并读取字符。

栅栏密码的安全性取决于栅栏的行数(也就是深度)。行数越多,密码通常越难破解,但同时解密也需要更精确的行数信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】Kubernetes高级功能

Kubernetes高级功能 文章目录 Kubernetes高级功能资源列表基础环境一、ConfigMap1.1、什么是ConfigMap1.2、ConfigMap能解决哪些问题1.3、ConfigMap应用场景1.4、ConfigMap局限性1.5、ConfigMap的创建方法1.5.1、命令行直接创建1.5.2、通过文件创建1.5.3、指定目录创建1.5.4、编…

生成和查看预定义宏

参考下面的指令 arm-none-eabi-gcc -marcharmv7e-m -dM -E - < /dev/null | grep SYNC这个指令是用来生成和查看预定义宏&#xff08;macros&#xff09;的一种方法。让我们逐步分解和解释这个命令的各个部分&#xff1a; arm-none-eabi-gcc: 这是 ARM 架构下的交叉编译器…

Github忘记了Two-factor Authentication code

意外重置了edge浏览器 码农家园github自从开启开启了2FA认证&#xff0c;每次输入auth code确实麻烦&#xff0c;于是下载了浏览器插件 Open two factor authenticator&#xff0c; 最近edge频繁宕机&#xff0c;而且提示磁盘空间不足&#xff0c;要不要立即清理并重置浏览器临…

【python】socket通信代码解析

目录 一、socket通信原理 1.1 服务器端 1.2 客户端 二、socket通信主要应用场景 2.1 简单的服务器和客户端通信 2.2 并发服务器 2.3 UDP通信 2.4 文件传输 2.5 HTTP服务器 2.6 邮件发送与接收 2.7 FTP客户端 2.8 P2P文件共享 2.9 网络游戏 三、python中Socket编…

Mathematica训练课(45)-- 一些常用的函数Abs[],Max[]等函数用法

①绝对值函数&#xff1a;Abs[]函数 ②最大值和最小值函数 ③反函数

微信小程序服务器从腾讯云迁移到阿里云出现的坑

微信小程序服务器从腾讯云迁移到阿里云出现的坑 背景 原先小程序后台服务器到期&#xff0c;因为之前买的是腾讯云新用户&#xff0c;便宜&#xff0c;到期后续费金额懂的都懂。就在阿里云用新用户买了个新的&#xff0c;遂把服务全转到了阿里云服务器上。 此时&#xff0c;域…

正则表达式教程:从入门到实战应用

正则表达式教程&#xff1a;从入门到实战应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨正则表达式的基础知识以及在实际应用中的实战技…

基于文本密度的网页正文提取的研究与实现

摘要&#xff1a; 随着互联网技术的迅猛发展&#xff0c;网页数量呈爆炸性增长&#xff0c;网页内容日趋复杂&#xff0c;如何在海量网页中快速、准确地提取出正文信息&#xff0c;成为了一个亟待解决的问题。本文提出了一种基于文本密度的网页正文提取方法&#xff0c;通过对…

AI 与 Python 实战干货:基于深度学习的图像识别

《AI 与 Python 实战干货&#xff1a;基于深度学习的图像识别》 今天咱不啰嗦&#xff0c;直接上干货&#xff01; 在 AI 领域&#xff0c;特别是图像识别方面&#xff0c;Python 简直是一把利器。咱就以手写数字识别为例&#xff0c;来看看怎么用 Python 实现一个深度学习模…

【kaptcha】kaptcha验证码的使用-SpringBoot集成

Kaptcha验证码的依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version> </dependency> Kaptcha验证码的配置类&#xff0c;对验证码的一些属性进行配置&#x…

Docker入门指南:构建、部署与管理容器化应用

Docker入门指南&#xff1a;构建、部署与管理容器化应用 引言 Docker&#xff0c;作为当今最流行的容器化平台之一&#xff0c;彻底改变了软件开发、部署与运维的格局。它通过轻量级、可移植的容器技术&#xff0c;让开发者能够在几乎任何地方以一致的环境运行应用程序&#…

Spring Boot结合FFmpeg实现视频会议系统视频流处理与优化

在构建高效稳定的视频会议系统时,实时视频流的处理和优化是开发者面临的核心挑战之一。这不仅仅是简单的视频数据传输,更涉及到一系列复杂的技术问题,需要我们深入分析和有效解决。 高并发与实时性要求: 视频会议系统通常需要支持多人同时进行视频通话,这就意味着系统需要…

基于SpringBoot网吧管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; Java精品实战案例《600套》 2025-2026年最值得选择的Java毕业设计选题大全&#xff1…

税务笔记()

文章目录 税务和发票的关系 其他国税总局地址发票查验地址会计学堂-税收分类编码地址 和会计相关打交道&#xff0c;肯定离不开税务知识&#xff0c;做个笔记吧。 首先&#xff0c;税务是个巨大的课题&#xff0c;一年也说不完&#xff0c;只是简单记录下方便了解即可。 税务和…

python基础语法 003-4 数据类型集合

1 集合 1.1 什么是集合 什么是集合&#xff1f;ANS:集合set是一个无序的不重复元素序列集合怎么表示&#xff1f;ANS: {} , 用逗号隔开打印元组类型&#xff0c;type()一个元素的集合怎么表示&#xff1f;&#xff1a;ANS:存储多种类型{"a", 1} """…

Spring Cloud Gateway3.x自定义Spring Cloud Loadbalancer负载均衡策略以及实现动态负载均衡策略的方案

目录 前言 1.原理分析 1.1 ReactiveLoadBalancerClientFilter源码分析 1.2 LoadBalancerClientFactory源码分析 2.代码实现 2.1 扩展原生RoundRobinLoadBalancer轮询策略 2.1.1 自定义实现RoundRobinLoadBalancer 2.1.2 配置自定义的RoundRobinLoadBalan…

【Python实战因果推断】7_元学习器2

目录 X-Learner X-Learner X-learner 在解释上要比前一个学习器复杂得多&#xff0c;但其实现却非常简单&#xff0c;所以如果你一开始不理解&#xff0c;也不用担心。X 学习器有两个阶段和一个倾向得分模型。第一个阶段与 T 学习器相同。首先&#xff0c;将样本分为治疗组和…

基于springboot实现家政服务平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现家政服务平台系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本家政服务平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理…

国产AI编程助手一览

1.阿里-通义灵码 https://tongyi.aliyun.com/lingma 2.Baidu Comate https://comate.baidu.com/zh 3.豆包MarsCode: https://www.marscode.cn/home 4.腾讯云AI代码助手 https://cloud.tencent.com/product/acc 5.智普-CodeGeeX http://codegeex.ai/zh-CN 6.天工智码 …

Java项目之石头剪刀布

以下是石头剪刀布游戏的Java代码: import java.util.Random; import java.util.Scanner; public class RockPaperScissorsGame { enum Move { ROCK, PAPER, SCISSORS } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 游…