密码学基础——古典密码学

目录

一、定义

特点:

二、发展阶段

三、代换密码

1.单表代换密码

1.1恺撒密码

1.2 移位变换  

1.3 仿射变换

2.多表代换密码

维吉尼亚密码

四、置换密码

栅栏密码


一、定义

    古典密码学是指在现代密码学出现之前,使用较为简单的数学方法和手工操作来实现信息加密的技术和理论。它主要依靠字符的代换、置换等基本操作来隐藏信息的真实内容。

  • 代换(替代):将明文中的每个字符替换为另一个字符,形成密文。例如,凯撒密码就是一种简单的代换密码,它将明文中的每个字母按照字母表顺序向后移动一定的位数来得到密文。
  • 置换(换位):不改变明文中的字符,而是通过重新排列字符的位置来形成密文。例如,栅栏密码就是将明文按照一定的规则分组,然后将每组中的字符顺序打乱重新排列得到密文。

特点

        古典密码的优点是算法相对简单,容易理解和实现。缺点是安全性较低,随着计算机技术的发展,很容易被破解。

二、发展阶段

  • 起源阶段

        古典密码学的历史可以追溯到古代。例如,公元前 1900 年左右,古埃及人就使用过一些简单的符号替换方法来加密信息。古希腊人使用一种名为 “天书” 的密码工具,通过将字母写在一条缠绕在木棒上的皮带上,来实现信息的加密和解密。

  • 发展阶段

        在中世纪,密码学得到了进一步的发展。许多国家的政府和军队开始使用密码来传递机密信息。例如,凯撒密码在罗马军队中被广泛使用。

  • 成熟阶段

        文艺复兴时期,密码学技术更加成熟,出现了多种复杂的加密方法,如维吉尼亚密码等。这些密码在当时的政治、军事和商业领域发挥了重要作用。

三、代换密码

        古典密码的加密是将明文的每一字母代换为字母表中的另一字母,代换前首先将明文字母用等价的十进制数字代替,再以代替后的十进制数字进行运算,字母与十进制数字的对应关系如表所示。

字母

a

b

c

d

e

f

g

h

i

j

k

l

m

数字

0

1

2

3

4

5

6

7

8

9

10

11

12

字母

n

o

p

q

r

s

t

u

v

w

x

y

z

数字

13

14

15

16

17

18

19

20

21

22

23

24

25

        根据代换是对每个字母逐个进行还是对多个字母同时进行,古典密码又分为单表代换密码和多表代换密码。  

1.单表代换密码

1.1恺撒密码

凯撒(Caesar)密码是将明文中的每个字母按照字母表顺序向后移动固定的位数(3位),得到密文。密代换和解密代换分别为:          

其中3是加解密所用的密钥,加密时,每个字母向后移3位(循环移位,字母x移到a,y移到b,z移到c)。解密时,每个字母向前移3位(循环移位)。

1.2 移位变换  

移位变换的加解密分别是:

1.3 仿射变换

仿射变换的加解密分别是:    

其中a,b是密钥,为满足0<=a,b<=25和gcd(a,26)=1的整数。其中gcd(a,26)=1表示a和26的最大公因子为1,表示a和26是互素的,a-1表示a的逆元,即 

【例题1】设仿射变换的加解密分别是: 

对 “security”加密,对 “vlxijh”解密。

解:(1)对 “security”加密:

所以,“security”对应的密文是 “rxjfkzyh”。

(2)对 “vlxijh”解密:

所以,“vlxijh”对应的明文是 “agency”。

2.多表代换密码

多表代换密码首先将明文M 分为由n个字母构成的分组M1,M2,...Mj,对每个分组Mi的加密为:

其中(A,B)是密钥,A是 n×n的可逆矩阵,满足gcd( |A|,N)=1(|A|是行列式).              

对密文分组Ci的解密为:

【例题2】设n=3,N26 ,

明文为 YOUR PIN NO IS FOUR ONE TWO SIX。

(1)加密过程:

将明文分成3个字母组成的分组 “YOU RPI NNO ISF OUR ONE TWO SIX”,如下所示:

由于矩阵B为0,所以

密文为 “WGI FGJ TMR LHH XTH WBX ZPS BRB”。

(2)解密过程:

解密时,先求出

再求

得明文为“YOU RPI NNO ISF OUR ONE TWO SIX”。

维吉尼亚密码

  • 简介:维吉尼亚密码是一种多表代换密码,由法国密码学家维吉尼亚于 1586 年提出。它克服了单表代换密码容易被频率分析破解的缺点,安全性相对较高。维吉尼亚密码的核心在于使用一个关键词作为密钥,并通过一张特殊的表格来进行加密。
  • 特点:通过使用多个凯撒密码的组合,隐藏了明文中字符的频率分布规律,增加了密码分析的难度。但如果密钥字较短,且明文较长,仍可能通过统计分析等方法被破解。
  • 加密原理
    • 首先有一个密钥,将密钥重复扩展,使其长度与明文相同。
    • 然后,根据密钥字中每个字符对应的字母在26行字母表(这张表格由26行字母表组成,每一行都是上一行向左偏移一位得到的)中的位置,在表格中找到对应的密文。

下面是26行的维吉尼亚密码表:第一行为明文字符,第一列为密钥字符,中间为加密(移位)后的结果。

【例题3】明文为 “SECURITY”,密钥为 “CODE”,

解:明文SECURITY(对应为18 4 2 20 17 8 19 24)一共有8个字符,

因此重复后的密钥为C O D E C O D E(变换为移位的位数为2 14 3 4 2 14 3 4)

S(明文)+C(密钥)=U(密文)即(18 + 2) % 26 = 20

E(明文)+O(密钥)=S(密文)

C(明文)+D(密钥)=F(密文)

U(明文)+E(密钥)=Y(密文)

依次类推,可以得到最终密文为:USFYTWWC

  • 解密原理
    • 与加密过程相反,根据密钥中每个字符对应的字母在字母表中的位置,对密文中相应位置的字符进行逆向的凯撒密码变换。
    • 也可以用密文对应的数字减去密钥对应位置的数字,若结果为负数则加上 26,最后对 26 取模。例如,对于第一个字符,(20 - 2) % 26 = 18

四、置换密码

栅栏密码

  • 简介:栅栏密码是一种简单的置换密码,它将明文按照一定的规则重新排列,从而达到加密的目的。
  • 特点:加密方法简单,容易实现。但其安全性较低,因为只是对字符的位置进行了置换,字符本身没有改变,攻击者可以通过分析字符的频率分布等特征来尝试破解。
  • 加密原理:将明文按照一定的字数分成若干行(栏数),然后将每行的字符按照特定的顺序重新排列(按列读取),形成密文。

【例题4】明文 “SECURITY” ,栏数为2

解:

(1)加密

由于栏数为2,即把明文SECURITY分成上下两行交替放置字符。

第一行:S E C U

第二行:R I T Y

加密后的密文就是将两行字符从上到下,从左到右依次连接起来,

密文S->R->E->I->C->T->U->Y,即SREICTUY

  • 解密原理:先根据已知的分组长度,将密文按照相反的顺序重新分组,再将每组的字符按照原来的顺序还原,即可得到明文。

(2)解密:

第一行:S C R T
第二行:E U I Y

明文为S->E->C->U->R->I->T->Y,即SECURITY

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

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

相关文章

【案例分享】江苏某汽车制造厂水冷式制冷站AI节能优化方案

主要诉求&#xff1a; 对B系统进行AI节能优化&#xff1a;3台离心机1台螺杆机板式换热器 优化前后对比&#xff1a; ⚫ 优化前&#xff1a;根据人工经验判断冷机和板换的启停&#xff0c;PLC固定逻辑调节参数 ⚫优化后&#xff1a;根据冷负荷对工况进行分类&#xff0c;自动…

vue+springboot 新增操作,前端id传string,后端接收为long类型,报错类型不匹配——解决方法

我在做新增功能的时候&#xff0c;做了一个逻辑判断&#xff0c;当前端没有传递对应的id值时&#xff0c;为新增&#xff1b;有id值时&#xff0c;为修改 问题一、&#xff1a;前端idundefined&#xff0c;和我的需求不符合&#xff0c;我要id为空&#xff0c;不传值。最后发现…

vue前端项目技术架构(第二版)

vue技术架构介绍 如下图所示&#xff0c;展示了项目系统的软件层次架构。该系统采用基于SOA&#xff08;面向服务架构&#xff09;思想的分层架构&#xff0c;分为四个主要层次&#xff1a;视图层、编译层、代码层和数据层。 视图层 浏览器&#xff1a;核心职责是解析并展示…

在服务器里面磁盘分区很简单吗?

不管是我们的普通办公电脑还是服务器都是需要硬盘的&#xff0c;硬盘的类型分机械硬盘&#xff08;HDD&#xff09;和固态硬盘&#xff08;SSD&#xff09;&#xff0c;这两种磁盘是我们平常最常见的硬盘您他们又有什么区别 机械硬盘&#xff08;HDD&#xff09; 原理&#xff…

Pycharm(十一):字符串练习题

1.输入一个字符串&#xff0c;打印所有偶数位上的字符(下标是0&#xff0c;2&#xff0c;4&#xff0c;6...位上的字符) # 练习题1:输入一个字符串&#xff0c;打印所有偶数位上的字符(下标是0&#xff0c;2&#xff0c;4&#xff0c;6...位上的字符) # 1.键盘录入字符串&…

虚幻5入门

常用操作 运行时&#xff0c;调试相机&#xff0c;按~键&#xff0c;输入ToggleDebugCamera 。进入自由视角 常用节点 gate节点&#xff1a;用于控制该流程通不通&#xff0c;执不执行。Flip Flop节点&#xff1a;反转执行&#xff0c;一次A&#xff0c;一次B。Set Timer by…

Prompt Flow 与 DSPy:大型语言模型开发的未来

作为一名大模型算法工程师&#xff0c;我一直在探索如何更高效地开发和优化基于大型语言模型&#xff08;LLM&#xff09;的应用程序。随着模型规模的不断扩大和应用场景的日益复杂&#xff0c;传统的开发方式已经难以满足高效、灵活和可扩展的需求。幸运的是&#xff0c;Promp…

Prompt攻击是什么

什么是Prompt攻击 Prompt攻击(Prompt Injection/Attack) 是指通过精心构造的输入提示(Prompt),诱导大语言模型(LLM)突破预设安全限制、泄露敏感信息或执行恶意操作的攻击行为。其本质是利用模型对自然语言的理解漏洞,通过语义欺骗绕过防护机制。 Prompt攻击的精髓:学…

Python 数据类型 - 集合(set)

Python 数据类型 - 集合(set) 1. 集合简介 集合(set)是Python中的一种无序、可变、不重复元素的容器数据类型。集合的主要用途&#xff1a; 快速成员检测&#xff08;判断元素是否存在&#xff09;去除重复项执行数学集合运算&#xff08;并集、交集、差集等&#xff09; 2.…

Profibus DP主站转Modbus TCP网关配置文件制作

Profibus DP主站转Modbus TCP网关配置文件制作 1、首先打开配置文件制作软件SST Profibus Configuration&#xff1a; 2、点击“Library”选择GSD文件所在文件夹找到后点击打开导入GSD文件: 3、点开Masters、molex选择主站设备&#xff1a; 4、双击添加后地址保存默认0就可以&…

如何批量拆分Excel工作表或按行拆分Excel表格 - Excel拆分器使用方法

在数据分析和处理的日常工作中&#xff0c;Excel文件因其强大的数据管理和计算能力而广受欢迎。然而&#xff0c;当面对庞大的Excel工作簿&#xff0c;特别是需要将其拆分为多个独立文件时&#xff0c;传统的操作方法往往会显得繁琐且效率低下。为了解决这一难题&#xff0c;Ex…

JavaScript基础-移动端常见特效

随着移动互联网的发展&#xff0c;为移动设备优化的网页变得越来越重要。JavaScript在实现移动端特有的交互体验中扮演着关键角色。本文将介绍几种常见的移动端特效&#xff0c;并通过具体的代码示例展示如何使用JavaScript和相关技术来创建这些特效。 一、手势识别 &#xf…

ui-tars和omni-parser使用

ui-tars部署和训练 说明快速开始环境准备ui-tars web推理和训练ui-tars api部署omni-parser使用 说明 镜像中包含ui-tars、llama-factory和omni-parser。该镜像还在审批中&#xff0c;估计明天可以上线&#xff0c;到时候可以在auto-dl中的社区镜像搜索。 快速开始 使用auto…

TF-IDF——自然语言处理——红楼梦案例

目录 一、红楼梦数据分析 &#xff08;1&#xff09;红楼梦源文件 &#xff08;2&#xff09;数据预处理——分卷实现思路 &#xff08;3&#xff09;分卷代码 二、分卷处理&#xff0c;删除停用词&#xff0c;将文章转换为标准格式 1.实现的思路及细节 2.代码实现&#…

【NLP 面经 5】

难以承受的东西只会让我在下一次更平静的面对 —— 25.4.2 一、NER任务&#xff0c;CRF模型改进 命名实体识别&#xff08;NER&#xff09;任务中&#xff0c;你使用基于条件随机场&#xff08;CRF&#xff09;的模型&#xff0c;然而模型在识别嵌套实体和重叠实体时效果不佳&a…

机器学习之回归算法

《数据挖掘技术与应用》 【实验名称】 实验&#xff1a;回归算法 【实验目的】 1.了解回归算法理论基础 2.平台实现算法 3. 编程实现分类算法 【实验原理】 线性回归是利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法&…

Cline源码分析

Cline源码分析 --- vscode插件开发与cline的界面系统 vscode插件开发基础知识开发基础‌核心概念核心API调试与发布调试 学习路线React开发界面前端代码分析package.jsonview/title&#xff08;视图标题栏菜单&#xff09;‌editor/title&#xff08;编辑器标题栏菜单&#xff…

k8s EmptyDir(空目录)详解

1. 定义与特性 emptyDir 是 Kubernetes 中一种临时存储卷类型&#xff0c;其生命周期与 Pod 完全绑定。当 Pod 被创建时&#xff0c;emptyDir 会在节点上生成一个空目录&#xff1b;当 Pod 被删除时&#xff0c;该目录及其数据会被永久清除。它主要用于同一 Pod 内多个容器间的…

【idea】实用插件

SonarLint SonarLint&#xff1a;代码质量扫描工具 使用 SonarLint 可以帮助我们发现代码的问题,并且还提供了相应的解决方案. 对于每一个问题&#xff0c;SonarLint 都给出了示例&#xff0c;还有相应的解决方案&#xff0c;教我们怎么修改&#xff0c;极大的方便了我们的开发…

【mysql 的安装及使用】

MySQL 9.0 一、下载MySQL[MySQL 9.0 下载] [(https://dev.mysql.com/downloads/mysql/)选择自定义,选择合适安装路径二、检查安装情况配置环境变量打开命令行查看版本创建数据库在MySQL中,可以使用create database语句来创建数据库。以下是创建一个名为my_db的数据库的示例:…