2022-3-2 UOOC 计算机安全导论 一 对称加密方式(置换、替代、多表;维吉尼亚) 【T.O.CTF】

本文主要是介绍2022-3-2 UOOC 计算机安全导论 一 对称加密方式(置换、替代、多表;维吉尼亚) 【T.O.CTF】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0、前言

我于这个学期选修了深圳大学开展的计算机安全导论,权作为网安方面小小的导引,促进自己学习。同时也修读了深圳大学的 现代密码学 ,这两门慕课上完都会更新随想。麻烦大家多多指教。

我们首先了解的是密码学基础,因为本人主要学习re,因此学习密码学倒是门新的挑战,废话不多说了,下边来写内容:

1、密码学基础

信息,作为人类文明重要的黏合剂,在几千年的文明史里,不断地扮演更重要的作用。在现代社会,掌握了信息就掌握了机会,就掌握了财富。于是人们就会想方设法将重要的信息加密、混淆,以期信息劫持者无法理解,而信息真正的接受者却能看懂信息,于是加密方和解密方的竞争开始了。

凯撒密码应该是最早应用于战争信息传递加密的加密算法(加密器),凯撒密码(英语:Caesar cipher),或称凯撒加密凯撒变换变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是一种“替换”的加密技术,需要加密的“原信息”中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换为加密好的信息。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

我们明确一下密码学中的名词,以方便我们学习(方便我打少几个字):

1、明文:指未加密的,可以正常阅读,表达信息发出者明确意志的信息。

2、密文:指经过各种加密后,信息劫持者无法直接阅读、得知发出者明确意志的文字。

3、密钥:发出方和接收方使用的,用于解密密文的秘密信息

我们根据密钥对加密方法进行分类,而上边介绍的凯撒密码,因为信息发送和接受方都使用一个密钥(这里的密钥是3,因为发送和接受方都知道凯撒密码的加解密规则,这个规则就是密钥),因此被称为对称加密。

相对的,发收双方使用不同密钥的,则是非对称加密。

对称加密被称为常规加密、私钥加密、单钥加密等,而非对称加密被称为公钥加密。

我们刚刚初步感受过私钥加密的操作,我们现在来明确一下对称加密的模型,具体为:

 其中,加密算法可以公开(不公开也会被监测到),但是私钥不可以,当然,大名鼎鼎如凯撒密码,你如果直接套用后移3位这一密钥会被瞬间破解,你也通过更改密钥的大小以增加破解难度,但是,值得提醒的是,凯撒密码型加密算法安全度极低,只能骗骗萌新小白。OK,你现在一定在想,我怎么样在凯撒型的基础上再增加难度,保护我的信息?

我们先来了解密码学里最基础最基础的加密手段:

1.1、替换密码:如凯撒密码,就是将明文里的每一个元素/字母,如果是二进制则是0和1(bit)都映射给另外一个元素,这个映射规则或者映射就是密码,如(A->D和3)

维基百科里的表述是:

替换式密码,是密码学中按规律将文字加密的手段。

替换式密码中可以用不同字母数为一单元,例如每一个或两个字母为一单元,然后再作加密。密文接收者解密时需用原加密方式解码才可取得原文本。

由于拼音文字中字的组成为有限的字母,以英语为例只有26个字母,组成可能的单元数较少,因此使用替换式密码相对较为容易,而且亦可使用简单机械进行加密;

相反,非拼音文字如中文则因单元数非常大难以使用一般加密方式,必需建立密码本,然后逐字替换。更何况某些非拼音文字中字字皆由不同大小的字根来组字(如藏文、日文、韩文),较难转换,因此使用替换式密码的示例比较少。

1.2、换位密码:将明文中每一个元素都重新排列,并没有改变明文中的任何信息,只是次序混乱,导致词不达意无法理解。

1和2相比较时,可以发现转位式密码只是改变明文中单元的位置,而单元本身没有转变;相反,替换式密码只是转换单元,但密文中单元的位置没有改变。

1.3、乘积密码(Product Cipher)通过结合两个或更多置换的方式制造比单独的加密方式更安全的密码以抵抗密码分析。乘积密码往往结合的是简单的置换/替换算法。

因为1、2两种加密方方都有其缺陷:替代密码的明文只要内容量较大,就有可能遭到频度分析法的攻击,而置换密码的缺点是明文量不能大,量大则会导致置换方式易被发现。

因此,乘积密码是最优解。在学习乘积密码前,很有必要枚举替换与置换两种密码各一种,帮助大家理解为何乘积密码有很大的优势。

2、古典密码算法

2.1、替换密码

 还是从凯撒密码说起。我们上文阐述了凯撒密码的具体操作,现在我们利用上面提到的密码学名词符号,列出凯撒密码的加密解密公式:

加密::C=E(3,m)=m+3(mode 26) 0<=m<=25;
解密::M=D(3,C)=C-3(mode 26) 0<=C<=25;

上边说过,我们可以通过改变偏移量来实现凯撒密码变式,我们叫它“维吉尼亚密码”。

维吉尼亚密码可以实现每一个元素的偏移量都不同,我们将偏移量计做K,则每个元素都偏移量K1、K2.......Kn构成“K表”,K表可以循环使用,即,例如明文有8个字母,而k表只有7位,则第八个字母需要偏移时,读取K1进行偏移。 我们把这种使用K表进行偏移的凯撒密码变式称为多表替换。

下面的K=(K1、K2........Kn)

 加解密公式稍加更改。

下边是具体构建维吉尼亚密码:【重要!!!!!】

维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行及26列的字母表。另外,维吉尼亚密码必须有一个密钥,这个密钥由字母组成,最少一个,最多可与明文字母数量相等。维吉尼亚密码加密方法示例如下:

明文:I've got it.
密钥:ok

密文:W'fs qcd wd.

首先,密钥长度需要与明文长度相同,如果少于明文长度,则重复拼接直到相同(也就是上面提到的“k表循环使用”)。本例中,明文长度为8个字母(非字母均被忽略),密钥会被程序补全为“okokokok”。现在根据如下维吉尼亚密码表格进行加密:

明文第一个字母是“I”,密钥第一个字母是“o”,在表格中找到“I”列与“o”行相交点,字母“W”就是密文第一个字母;同理,“v”列与“k”行交点字母是“F”;“e”列与“o”行交点字母是“S”……

维吉尼亚密码只对字母进行加密,不区分大小写,若文本中出现非字母字符会原样保留

如果输入多行文本,每行是单独加密的。

值得注意的是:

维吉尼亚密码的偏移时从0「A」开始的!!!!

2.2换位(置换)密码

我们介绍栅栏密码

加密原理:把要加密的信息交替排成两行,再将下边的行连接到上边行的尾部。

绕晕了?上图吧。

组成栅栏密码的明文一般不超30个字母。

还有行变换密码:

提高安全性的方法:

1、分多行增加加密强度

2、对加密后的密文再进行其他加密操作(乘积)。

是吧,最后都回到了乘积密码。了解完这些,终于可以好好讲分组密码啦,我们下节再聊!

17:27.3.2.22

这篇关于2022-3-2 UOOC 计算机安全导论 一 对称加密方式(置换、替代、多表;维吉尼亚) 【T.O.CTF】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169601

相关文章

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

详解Java中三种状态机实现方式来优雅消灭 if-else 嵌套

《详解Java中三种状态机实现方式来优雅消灭if-else嵌套》这篇文章主要为大家详细介绍了Java中三种状态机实现方式从而优雅消灭if-else嵌套,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录1. 前言2. 复现传统if-else实现的业务场景问题3. 用状态机模式改造3.1 定义状态接口3

Java异常捕获及处理方式详解

《Java异常捕获及处理方式详解》异常处理是Java编程中非常重要的一部分,它允许我们在程序运行时捕获并处理错误或不预期的行为,而不是让程序直接崩溃,本文将介绍Java中如何捕获异常,以及常用的异常处... 目录前言什么是异常?Java异常的基本语法解释:1. 捕获异常并处理示例1:捕获并处理单个异常解释:

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Redis分布式锁中Redission底层实现方式

《Redis分布式锁中Redission底层实现方式》Redission基于Redis原子操作和Lua脚本实现分布式锁,通过SETNX命令、看门狗续期、可重入机制及异常处理,确保锁的可靠性和一致性,是... 目录Redis分布式锁中Redission底层实现一、Redission分布式锁的基本使用二、Red

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MyBatis流式查询两种实现方式

《MyBatis流式查询两种实现方式》本文详解MyBatis流式查询,通过ResultHandler和Cursor实现边读边处理,避免内存溢出,ResultHandler逐条回调,Cursor支持迭代... 目录MyBATis 流式查询详解:ResultHandler 与 Cursor1. 什么是流式查询?

java实现多数据源切换方式

《java实现多数据源切换方式》本文介绍实现多数据源切换的四步方法:导入依赖、配置文件、启动类注解、使用@DS标记mapper和服务层,通过注解实现数据源动态切换,适用于实际开发中的多数据源场景... 目录一、导入依赖二、配置文件三、在启动类上配置四、在需要切换数据源的类上、方法上使用@DS注解结论一、导入