密码学系列(四)——对称密码2

一、RC4

RC4(Rivest Cipher 4)是一种对称流密码算法,由Ron Rivest于1987年设计。它以其简单性和高速性而闻名,并广泛应用于网络通信和安全协议中。下面是对RC4的详细介绍:

  1. 密钥长度:

    • RC4的密钥长度可变,通常为8至256字节之间。
    • 密钥长度的选择对RC4的安全性和性能产生影响。
  2. 算法原理:

    • RC4是一种流密码算法,它使用一个伪随机数发生器(PRNG)生成密钥流,然后将明文与密钥流进行异或运算得到密文。
    • RC4算法主要包括密钥初始化和密钥流生成两个阶段。
  3. 密钥初始化:

    • 密钥初始化阶段通过对内部状态数组进行初始化来准备生成密钥流所需的数据结构。
    • 这包括将0到255的字节值填充到内部状态数组(S)中,并根据密钥的字节值进行初始的排列操作。
  4. 密钥流生成:

    • 密钥流生成阶段利用内部状态数组(S)和两个指针(i和j)来生成伪随机的密钥流。
    • 指针i和j的更新和内部状态数组的排列操作是密钥流生成的核心过程。
    • 密钥流可以根据需要生成任意长度的密钥流,并与明文进行异或运算以产生密文。
  5. 安全性:

    • RC4的安全性受到多种攻击的影响,包括密钥重用、密钥流偏置和明文相关性等。
    • 长期以来,RC4已经被发现存在严重的安全漏洞,导致其在实际应用中的使用受到限制。
  6. 应用领域:

    • RC4曾被广泛应用于诸如SSL/TLS等安全协议中的数据加密。(现在很少使用)

二、流密码

流密码是一种对称加密算法,它使用密钥流(也称为伪随机密钥流)和明文按位进行异或运算,从而生成密文。与分组密码不同,流密码以连续的比特流方式处理数据,而不是将数据分成固定大小的块。

  1. 密钥流生成:

    • 流密码的核心是生成伪随机的密钥流,该密钥流与明文按位进行异或运算以产生密文。
    • 密钥流的生成通常通过伪随机数发生器(PRNG)实现。
    • PRNG接受一个密钥和一个初始向量(IV)作为输入,并生成一个长密钥流。
  2. 密钥流复用:

    • 密钥流可以按需生成,因此可以在不同的加密操作中重复使用。
    • 为了确保安全性,每个使用相同密钥流的加密操作都应使用不同的初始向量(IV)。
  3. 加密过程:

    • 加密过程中,明文按位与密钥流进行异或运算,生成相应的密文。
    • 密文的生成速度与密钥流的生成速度相同。
  4. 解密过程:

    • 解密过程与加密过程完全相同,将密文按位与相同的密钥流进行异或运算,以恢复原始的明文。
  5. 安全性:

    • 流密码的安全性主要依赖于密钥流的质量和密钥流复用的方式。
    • 密钥流必须具有高度随机性和统计特性,以保证密文的安全性。
    • 密钥流复用时,必须使用不同的初始向量(IV)来保证密钥流的唯一性。

LFSR线性反馈移位寄存器

 

  1. 结构和原理:

    • LFSR通常由一个移位寄存器和一个线性反馈函数组成。
    • 移位寄存器是一个包含多个存储单元的寄存器,每个存储单元存储一个比特。
    • 线性反馈函数根据寄存器中的比特值计算下一个比特的值,并将其放入寄存器的最左侧。
  2. 工作原理:

    • 初始时,LFSR的移位寄存器被初始化为一个特定的比特序列。
    • 通过连续地进行移位操作和应用线性反馈函数,LFSR生成一个伪随机的比特序列。
    • 每次移位时,最右侧的比特被丢弃,而通过线性反馈函数计算得到的新比特被插入到最左侧。
  3. 线性反馈函数:

    • 线性反馈函数定义了计算下一个比特的方法,通常是通过异或运算(XOR)来实现。
    • 线性反馈函数使用移位寄存器的特定比特作为输入,并根据预定义的规则计算下一个比特的值。
  4. 伪随机性:

    • LFSR生成的序列是伪随机的,因为它们是通过确定性的移位和线性反馈函数计算得到的。
    • 伪随机序列的周期性取决于移位寄存器的长度和线性反馈函数的选择。

示例:

假设我们有一个3位的LFSR,并且初始状态为"101",线性反馈函数为异或运算。

移位寄存器(初始状态): 1 0 1

生成的比特序列: 1 0 1 0 1 0 1 ...

下一步的计算过程如下:

  • 移位操作: 1 0 1 -> 0 1 0
  • 线性反馈函数: 0 XOR 1 XOR 0 = 1
  • 插入新比特: 1 0 1 -> 1 0 1

这样,LFSR会不断重复生成比特序列"101010..."。

三、分组密码

分组密码与流密码的区别就在于有无记忆性

1. 二重DES

二重DES是一种对称分组密码算法,它是对DES算法的一种扩展。在二重DES中,明文数据经过两次DES加密来提供更高的安全性。

  1. 工作原理:

    • 二重DES使用两个独立的DES加密步骤来加密数据。
    • 首先,明文数据通过第一个DES加密成为中间密文。
    • 然后,中间密文再经过第二个DES加密,生成最终的密文。
  2. 密钥使用:

    • 二重DES使用两个密钥:K1和K2。
    • 第一个DES加密使用密钥K1,第二个DES加密使用密钥K2。
    • 密钥长度为56比特,与标准的DES算法相同。
  3. 加密过程:

    • 明文数据首先通过第一个DES加密,使用密钥K1生成中间密文。
    • 然后,中间密文通过第二个DES加密,使用密钥K2生成最终的密文。

    明文数据 -> 第一个DES加密(K1) -> 中间密文 -> 第二个DES加密(K2) -> 密文数据

  4. 解密过程:

    • 密文数据首先通过第二个DES解密,使用密钥K2生成中间密文。
    • 然后,中间密文通过第一个DES解密,使用密钥K1生成最终的明文数据。

    密文数据 -> 第二个DES解密(K2) -> 中间密文 -> 第一个DES解密(K1) -> 明文数据

  5. 安全性:

    • 二重DES相对于单个DES提供了更高的安全性,因为它需要两个独立的密钥进行加密。
    • 由于DES算法的密钥长度较短,被认为容易受到暴力破解和差分密码分析等攻击。
    • 通过使用两个DES加密步骤,二重DES增加了破解的复杂性,提高了安全性。

2.ECB(电子密码本模式)

  1. ECB是最简单的密码模式之一,将明文划分为固定大小的数据块,然后使用相同的密钥对每个数据块进行独立的加密。
  2. 每个数据块使用相同的密钥和相同的加密算法进行加密,因此对于相同的明文块,总是生成相同的密文块。
  3. ECB模式的主要缺点是,相同的明文块会生成相同的密文块,这可能导致一些安全性问题,并且不适用于加密大量重复模式的数据。

3.CBC(密码分组链接模式)

ECB的最大特性是同一明文分组在消息中重复出现的话,产生的密文分组也相同。ECB用于长消息时可能不够安全。为了解决ECB的安全缺陷,可以让重复的明文分组产生不同的密文分组——CBC

        CBC模式引入了初始化向量(IV,Initialization Vector)的概念,并将其与明文块进行异或操作,然后再进行加密。

        初始向量是一个随机生成的数据块,用于第一个数据块的加密,并且每个后续数据块的加密都使用前一个密文块作为初始向量。

        CBC模式通过引入数据块之间的依赖性,增加了安全性,避免了ECB模式相同明文块生成相同密文块的问题。

CBC模式,它一次对一个明文分组加密,每次加密使用同一密钥,加密算法的输入是当前明文分组和前一次密文分组的异或,因此加密算法的输入不会显示出与这次的明文分组之间的固定关系,所以重复的明文分组不会在密文中暴露出这种重复关系。

4.CFB(密码反馈模式)

        CFB模式将分组密码算法(如DES或AES)转换为自反函数,可以用于加密任意长度的数据。

        CFB模式将前一个密文块作为输入,通过加密算法生成密钥流,然后将其与明文进行异或操作,得到密文。

        密文反馈模式允许加密算法在每个密文块之间产生不同的密钥流,因此可以对数据进行流加密。

cfb加密

cfb解密

四、IDEA

IDEA(International Data Encryption Algorithm)是一种对称分组密码算法,由Xuejia Lai和James L. Massey于1991年设计开发。它以其高度的安全性和较快的加密速度而闻名,并被广泛应用于各种领域。

密钥和分组大小:

    • IDEA使用128位密钥和64位分组大小。
    • 密钥长度为128位,但事实上,IDEA使用了128位密钥中的91位,其余位用于校验和完整性。
    • 分组大小为64位,即每次加密的明文或密文数据块长度为64位。
  1. 加密过程:

    • IDEA算法使用迭代结构,将明文数据块分为左右两个32位部分(L0和R0)。
    • 加密过程包括16轮迭代,每轮中,右半部分(Ri)与轮密钥(Ki)进行一系列运算,然后与左半部分(Li)进行异或操作。
    • 最后,左右半部分进行交换,得到加密后的数据块。
  2. 解密过程:

    • 解密过程与加密过程相反,使用相同的轮密钥,但按相反的顺序应用。
    • 解密过程中,右半部分(Ri)与轮密钥(Ki)进行一系列运算,然后与左半部分(Li)进行异或操作。
    • 最后,左右半部分进行交换,得到解密后的数据块。
  3. 安全性:

    • IDEA算法被广泛认为是一种安全性较高的对称分组密码算法。
    • 它使用了复杂的数学运算,包括模运算、异或运算、加法运算和乘法运算,以增加密码的强度。
    • IDEA的密钥长度较长,增加了破解的难度。
    • 经过多年的分析和广泛的应用,IDEA算法尚未出现严重的弱点或漏洞。

IDEA加密块长度是64bits,密钥长度是128bits,是由八轮变换和半轮输出转换组合而成的。加密和解密的过程是类似的。我们看下IDEA的基本流程图:

上面图中, 蓝色圆圈是XOR异或操作,绿色框是加法模数216。红色的点是乘模216 + 1,如果输入都是0(0x0000)那么将会被转换为216,如果输入是216,那么会被转换为0(0x0000)。

八轮操作之后,中间两个值的交换抵消了最后一轮结束时的交换:

 

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

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

相关文章

Python爬虫实战入门:爬取360模拟翻译(仅实验)

文章目录 需求所需第三方库requests 实战教程打开网站抓包添加请求头等信息发送请求,解析数据修改翻译内容以及实现中英互译 完整代码 需求 目标网站:https://fanyi.so.com/# 要求:爬取360翻译数据包,实现翻译功能 所需第三方库 …

【OnlyOffice】 桌面应用编辑器,版本8.0已发布,PDF表单、RTL支持、Moodle集成、本地界面主题

ONLYOFFICE桌面编辑器v8.0是一款功能强大、易于使用的办公软件,适用于个人用户、企业团队和教育机构,帮助他们高效地处理文档工作并实现协作。无论是在Windows、macOS还是Linux平台上,ONLYOFFICE都能提供无缝的编辑和共享体验。 目录 ONLYOFF…

Jmeter接口测试+压力测试

Jmeter-http接口脚本 一般分五个步骤:(1)添加线程组 (2)添加http请求 (3)在http请求中写入接入url、路径、请求方式和参数 (4)添加查看结果树 (5)调用接口、…

化学分子Mol2文件格式与使用注意事项

欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 文章目录 前言一、Mol2文件示例二、 Mol2文件主要结构解释及注意事项MOLECULE 字段解释ATOM 字段解释BOND 字段解释SUBSTRUCTURE字段解释 总结参考资料 前言 Mol2格式文件是一个ASCII 文件,由Tripos…

STM32控制max30102读取血氧心率数据(keil5工程)

一、前言 MAX30102是一款由Maxim Integrated推出的低功耗、高精度的心率和血氧饱和度检测传感器模块,适用于可穿戴设备如智能手环、智能手表等健康管理类电子产品。 该传感器主要特性如下: (1)光学测量:MAX30102内置…

Rocky Linux 运维工具yum

一、yum的简介 ​​yum​是用于在基于RPM包管理系统的包管理工具。用户可以通过 ​yum​来搜索、安装、更新和删除软件包,自动处理依赖关系,方便快捷地管理系统上的软件。 二、yum的参数说明 1、install 用于在系统的上安装一个或多个软件包 2、seach 用…

Docker 常用操作命令备忘

Docker 一旦设置好了环境,日常就只要使用简单命令就可以运行和停止。 于是,我每次用的时候,都想不起来一些关键性的命令到底怎么用,特此记录。 一、镜像管理 从公有仓库拉取镜像 (对于使用苹果电脑 M1/M2/M3 芯片的 …

完全分布式运行模式

完全分布式运行模式 分析:之前已经配置完成 ​ 1)准备3台客户机(关闭防火墙、静态ip、主机名称) ​ 2)安装JDK ​ 3)配置环境变量 ​ 4)安装Hadoop ​ 5)配置环境变量 ​ 6&am…

Springboot集成Druid实现监控功能

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒杀一切。Druid可以很好的监控DB池连接和SQL的执行情况&#…

AOSP10 替换系统launcher

本文实现将原生的launcher 移除&#xff0c;替换成我们自己写的launcher。 分以下几个步骤&#xff1a; 一、新建一个自己的launcher项目。 1.直接使用android studio 新建一个项目。 2.修改AndroidManifest.xml <applicationandroid:persistent"true"androi…

nginx实现http反向代理

一、代理概述 1、代理概念 1.1 正向代理&#xff08;Forward Proxy&#xff09; 概念&#xff1a;正向代理是位于客户端和目标服务器之间的代理服务器&#xff0c;代表客户端向目标服务器发送请求。客户端将请求发送给代理服务器&#xff0c;然后代理服务器将请求转发给目标服…

Prompt 编程的优化技巧

一、为什么要优化 一&#xff09;上下文限制 目前 GPT-3.5 以及 GPT-4最大支持 16K 上下文&#xff0c;比如你输入超过 16k 的长文本&#xff0c;ChatGPT 会提示文本过大&#xff0c;为了避免 GPT 无法回复&#xff0c;需要限制 上下文在16k 以内 上下文对于 GPT 来说是非常重…

【手机端测试】adb基础命令

一、什么是adb adb&#xff08;Android Debug Bridge&#xff09;是android sdk的一个工具 adb是用来连接安卓手机和PC端的桥梁&#xff0c;要有adb作为二者之间的维系&#xff0c;才能让用户在电脑上对手机进行全面的操作。 Android的初衷是用adb这样的一个工具来协助开发人…

第103讲:配置Mycat的Schema逻辑库列表

文章目录 1.Schema逻辑库2.自定义Mycat连接后显示那些Schema 1.Schema逻辑库 使用Mycat登录到数据库后&#xff0c;发现仅显示了一个TESTDB&#xff0c;这个TESTDB并不是后台数据库节点中的数据库&#xff0c;只是Mycat定义的逻辑库Schema&#xff0c;接下来我们就来说明如果自…

蓝桥杯Learning

Part 1 递归和递推 1. 简单斐波那契数列 n int(input())st [0]*(47) # 注意这个地方&#xff0c;需要将数组空间设置的大一些&#xff0c;否则会数组越界 st[1] 0 st[2] 1 # 这个方法相当于是递推&#xff0c;即先求解一个大问题的若干个小问题 def dfs(u):if u 1:print(…

CKA认证,开启您的云原生之旅!

在当今数字化时代&#xff0c;云计算已经成为企业和个人发展的关键技术。而获得CKA&#xff08;Certified Kubernetes Administrator&#xff09;认证&#xff0c;将是您在云原生领域迈出的重要一步。 CKA认证是由Kubernetes官方推出的权威认证&#xff0c;它旨在验证您在Kuber…

OSI模型

OSI模型 TCP/IP参考模型 TCP/IP常见协议 应用层 FTP&#xff08;用于文件的下载和上传&#xff0c;采用C/S结构&#xff09; Telnet&#xff08;用于远程登陆服务&#xff09; DNS&#xff08;域名解析&#xff09; HTTP&#xff08;接收和发布Html页面&#xff09; 传输层…

MetaGPT 1 安装与配置踩坑实录

安装 与 配置直接参考这里就行&#xff1a;Hugging Muti Agent&#xff08;二月学习&#xff09; - 飞书云文档 (feishu.cn) 这里按照教程安装的是metagpt 0.6.6 &#xff0c;经过跟0.7.0对比&#xff0c;个人认为0.7对其他llm接入可能更好&#xff0c;文档也更清晰。 0.6.6的…

VUE3:统计分析页面布局+自适应页面参考

一、布局 <template><div class"container1"><div class"form white"><el-form :inline"true" :rules"rules" :model"queryParams" label-width"80px" ref"querParmRef"><e…

java springmvc/springboot 项目通过HttpServletRequest对象获取请求体body工具类

请求 测试接口 获取到的 获取到打印出的json字符串里有空格这些&#xff0c;在json解析的时候正常解析为json对象了。 工具类代码 import lombok.extern.slf4j.Slf4j; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.we…