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

目录

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.mfbz.cn/a/755752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

晋级国赛!卓翼飞思技术引领,助力辽宁赛区机器人及人工智能大赛圆满收官

近日,第二十六届中国机器人及人工智能大赛—辽宁赛区选拔赛在大连海事大学圆满收官。本次大赛吸引来自辽宁工业大学、大连理工大学等知名高校的10余支队伍参与,充分展现各高校在机器人及人工智能领域的深厚实力和创新精神。其中,由卓翼飞思实…

用ChatGPT快速打造一个专业WordPress网站

作为一个使用HostEase多年的老用户,我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤,更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…

解锁音乐潮流:使用TikTok API获取平台音乐信息

一、引言 TikTok,作为全球领先的短视频社交平台,不仅为用户提供了展示自我、分享生活的舞台,还为用户带来了丰富多样的音乐体验。在TikTok上,音乐与视频内容的结合,为用户带来了全新的视听盛宴。对于音乐制作人、品牌…

阿里云开启ssl证书过程记录 NGINX

🤞作者简介:大家好,我是思无邪,2024 毕业生,某厂 Go 开发工程师.。 🐂我的网站:https://www.yishanicode.top/ ,持续更新,希望对你有帮助。 🐞如果文章或网站…

Unity | Shader基础知识(第十五集:透明效果)

目录 一、前言 二、素材准备 三、准备基础代码 四、准备基础场景 五、SurfaceOutput结构体 六、透明度 七、渲染顺序 八、选错的后果 九、Tags之渲染顺序 十、Cull(正面和反面渲染) 十一、代码汇总 十二、作者的碎碎念 一、前言 因为shader…

Python 面试【高难】

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

sheng的学习笔记-AI-高斯混合模型(GMM)

AI目录:sheng的学习笔记-AI目录-CSDN博客 需要学习前置知识: 聚类,可参考 sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 EM算法,可参考 sheng的学习笔记-AI-EM算法-CSDN博客 贝叶斯,可参考 sheng的学习笔记-AI-…

SpringBoot-SpringBoot中文文档

简介 Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同时支持基于J…

DDMA信号处理以及数据处理的流程---跟踪

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

基于Java游戏售卖网站详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

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

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

深度剖析:前端如何驾驭海量数据,实现流畅渲染的多种途径

文章目录 一、分批渲染1、setTimeout定时器分批渲染2、使用requestAnimationFrame()改进渲染2.1、什么是requestAnimationFrame2.2、为什么使用requestAnimationFrame而不是setTimeout或setInterval2.3、requestAnimationFrame的优势和适用场景 二、滚动触底加载数据三、Elemen…

【Python】已解决:ModuleNotFoundError: No module named ‘nltk‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:ModuleNotFoundError: No module named ‘nltk‘ 一、分析问题背景 在Python编程中,我们常常需要使用第三方库来扩展语言的功能和应用场景。NLTK&am…

DP:解决路径问题

文章目录 二维DP模型如何解决路径问题有关路径问题的几个问题1.不同路径2.不同路径Ⅱ3.下降路径最小和4.珠宝的最高价值5.地下城游戏 总结 二维DP模型 二维动态规划(DP)模型是一种通过引入两个维度的状态和转移方程来解决复杂问题的技术。它在许多优化和…

Linux----> tail、cat、more、head、less的用法详解

1.tail命令&#xff1a;用于查看文件的最后几行内容。 基本用法&#xff1a;tail [选项] [文件] 常用选项&#xff1a; -n <行数>&#xff1a;显示最后的 <行数> 行。-f&#xff1a;实时显示文件新增内容&#xff0c;通常用于查看日志文件。 示例&#xff1a;…

算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 决策树是一种简单直观的机器学习算法&#xff0c;它广泛应用于分类和回归问题中。它的核心思想是将复杂的决策过程分解成一系列简单的决…

JavaSE-面向对象(总结复习详细)

前言: 在 Java SE 中&#xff0c;面向对象编程是一种基本的编程范式&#xff0c;它将现实世界中的问题抽象成对象&#xff0c;然后通过对象之间的交互来解决问题。在面向对象编程中&#xff0c;所有的操作都是围绕对象展开的&#xff0c;对象拥有属性和行为&#xff0c;并且可…

MambaMixer:突破Transformers限制的高效深度学习架构

深度学习模型尤其是Transformers架构&#xff0c;已经在诸如自然语言处理、计算机视觉和时间序列预测等多个领域取得了显著成就。然而&#xff0c;随着模型输入序列长度的增加&#xff0c;传统的Transformers模型面临着显著的扩展性问题。其核心问题在于&#xff0c;Transforme…

GPT-5:编织未来智能的经纬

GPT-5技术突破预测 随着GPT-5的预告&#xff0c;人工智能的叙事正步入一个崭新的篇章。想象中的GPT-5不仅是自然语言处理&#xff08;NLP&#xff09;领域的革命&#xff0c;更是对“理解”本身的一次重新定义。它可能集成深度学习的最新进展&#xff0c;如自注意力机制的进一步…

Java访问修饰符的区别

public&#xff1a;公开的&#xff0c;任何地方都可以访问。 protected&#xff1a;受保护的&#xff0c;同一个包中的类和所有子类(可跨包)可以访问。 private&#xff1a;私有的&#xff0c;只有在同一个类中可以访问。 默认&#xff08;无修饰符&#xff09;&#xff1a;包级…