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

news2024/11/19 7:45:12

目录

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.coloradmin.cn/o/1890604.html

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

相关文章

前端Web开发HTML5+CSS3+移动web视频教程 Day4 CSS 第2天

P44 - P 四个知识点: 复合选择器 CSS特性 背景属性 显示模式 复合选择器 复合选择器仍然是选择器,只要是选择器,作用就是找标签。复合选择器就是把基础选择器进行组合使用。组合了之后就可以在大量的标签里面更快更精准地找标签了。找…

分布式锁——基于Redis分布式锁

单机锁 服务器只有一个,JVM只有一个。 用synchronized加锁,对lock对象加锁,只有线程1结束,线程2,3才会开始。 再用uid避免一个线程多次进来。 分布式锁 真正上线时: 【注:这些服务器连接的是一个Redis集…

构建安全稳定的应用:Spring Security 实用指南

前言 在现代 Web 应用程序中,安全性是至关重要的一个方面。Spring Security 作为一个功能强大且广泛使用的安全框架,为 Java 应用程序提供了全面的安全解决方案。本文将深入介绍 Spring Security 的基本概念、核心功能以及如何在应用程序中使用它来实现…

PyTorch计算机视觉实战:目标检测、图像处理与深度学习

本书基于真实数据集,全面系统地阐述现代计算机视觉实用技术、方法和实践,涵盖50多个计算机视觉问题。全书分为四部分:一部分介绍神经网络和PyTorch的基础知识,以及如何使用PyTorch构建并训练神经网络,包括输入数据缩放…

Study--Oracle-06-Oracler网络管理

一、ORACLE的监听管理 1、ORACLE网络监听配置文件 cd /u01/app/oracle/product/12.2.0/db_1/network/admin 2、在Oracle数据库中,监听器(Listener)是一个独立的进程,它监听数据库服务器上的特定端口上的网络连接请求&#xff0c…

Laravel介绍与学习入门

Laravel 是一款优雅且功能强大的 PHP Web 开发框架,它被广泛认为是 PHP 领域内构建现代 Web 应用程序的最佳选择之一。Laravel 提供了一套简洁、富有表现力的语法,使得开发者能够高效地编写清晰、可维护的代码。以下是 Laravel 的一些关键特点和入门概念…

GNeRF代码复现

https://github.com/quan-meng/gnerf 之前一直去复现这个代码总是文件不存在,我就懒得搞了(实际上是没能力哈哈哈) 最近突然想到这篇论文重新试试复现 一、按步骤创建虚拟环境安装各种依赖等 二、安装好之后下载数据,可以用Blen…

使用requests爬取拉勾网python职位数据

爬虫目的 本文是想通过爬取拉勾网Python相关岗位数据,简单梳理Requests和xpath的使用方法。 代码部分并没有做封装,数据请求也比较简单,所以该项目只是为了熟悉requests爬虫的基本原理,无法用于稳定的爬虫项目。 爬虫工具 这次…

STM32入门笔记(03): ADC(SPL库函数版)(2)

A/D转换的常用技术有逐次逼近式、双积分式、并行式和跟踪比较式等。目前用的较多的是前3种。 A/D转换器的主要技术指标 转换时间 分辨率 例如,8位A/D转换器的数字输出量的变化范围为0~255,当输入电压的满刻度为5V时,数字量每变化…

【分布式数据仓库Hive】HivQL的使用

目录 一、Hive的基本操作 1. 使用Hive创建数据库test 2. 检索数据库(模糊查看),检索形如’te*’的数据库 3. 查看数据库test详情 4. 删除数据库test 5. 创建一个学生数据库Stus,在其中创建一个内部表Student,表格…

3ds Max渲染曝光过度怎么办?

3dmax效果图云渲染平台——渲染100 以3ds Max 2025、VR 6.2、CR 11.2等最新版本为基础,兼容fp、acescg等常用插件,同时LUT滤镜等参数也得到了同步支持。 注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 遇到3ds Max渲染过程中曝光过度的问题&#xf…

【刷题汇总--简写单词、dd爱框框、除2!】

C日常刷题积累 今日刷题汇总 - day0031、简写单词1.1、题目1.2、思路1.3、程序实现 - 思路11.4、程序实现 - 思路2(优化) 2、dd爱框框2.1、题目2.2、思路2.3、程序实现 - 蛮力法2.4、程序实现 - 同向双指针(滑动窗口) 3、除2!3.1、题目3.2、思路3.3、程序实现 4、题目链接 今日…

ArcTs布局入门04——相对布局 媒体查询

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧 扫描下面的二维码关注公众号。 本文将探讨相对布局与媒体查询,为啥把他们放到一起呢?主要是因为相对布局在响应式的场景下做得不太好,一般情况下和媒体查询(不同尺…

Visual Studio 中的键盘快捷方式

1. Visual Studio 中的键盘快捷方式 1.1. 可打印快捷方式备忘单 1.2. Visual Studio 的常用键盘快捷方式 本部分中的所有快捷方式都将全局应用(除非另有指定)。 “全局”上下文表示该快捷方式适用于 Visual Studio 中的任何工具窗口。 生成&#xff1…

使用EndNote在Word中插入参考文献,并编辑参考文献样式方法

一、背景 在准备中期报告时,学校给的是Word模板,习惯了Latex排版和添加参考文献的便利后,真不想用word写东西。 之前投《机器人》期刊(被拒了)和准备开题的时候也是用word写的,当时为方便添加参考文献和定…

【Linux】线程封装与互斥(万字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 C多线程的用法 对原生线程进行一次封装 理解pthread线程 Linux线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 操作共享变量会有问题的售票…

20万内最能打的颜值,小鹏MONA M03开启全球首秀

7月3日,小鹏MONA M03开启全球首秀。这款为年轻用户打造的智能纯电掀背轿跑,以其独特的AI量化美学设计吸引了行业关注。 据「TMT星球」了解,小鹏汽车董事长CEO何小鹏携手造型中心副总裁胡安马洛佩兹(JuanMa Lopez)共同…

【高中数学/基本不等式】已知:x,y皆大于1,且x+2y=4 求:1/(x-1)+1/(y-1)的最小值为?

【问题来源】 https://www.ixigua.com/7025123539728466469?logTag1c2fd2e305d60e6277ab 之第一题 【问题】 已知:x,y皆大于1,且x2y4 求:1/(x-1)1/(y-1)的最小值为? 【解答】 解: 若将(x2y)/41代入目标式&…

OpenGL3.3_C++_Windows(27)

法线/凹凸贴图 如何让纹理产生更细节的效果,产生凹凸视觉感?解决思路之一:镜面贴图(黑—白)((diffuse贴图(rgba)),阻止部分表面被照的更亮,但这并…

鸿蒙数据防泄漏(DLP)【Data Loss Prevention Kit简介】

Data Loss Prevention Kit简介 Data Loss Prevention Kit(数据防泄漏服务,简称为DLP),是系统提供的系统级的数据防泄漏解决方案,提供文件权限管理、加密存储、授权访问等能力,数据所有者可以基于帐号认证对…