赞
踩
这篇文章是继上一篇(学习笔记1.0)更新的文章(可以去主页查看相应内容),本篇文章主要讲解对称加密的工作原理、加密算法以及对称加密与哈希函数之间有哪些关联。希望对各位有帮助,也可以在评论区给予补充说明。
对称加密是一种加密技术,使用相同的密钥来进行加密和解密。这意味着发送方和接收方都使用相同的密钥来加密和解密消息。密钥既用于加密明文(原始消息),也用于解密密文(加密后的消息)。
加密(Encrypt)是从明文生成密文的步骤,解密(Decrypt)是从密文还原成明文的步骤,而这两个步骤都需要用到密钥(Key)。这和我们现实中,用钥匙上锁和开锁是一样的。
让我们更详细地了解对称加密的工作原理和特点:
总的来说,对称加密是一种重要的加密技术,广泛应用于信息安全领域,可以保护数据的机密性,防止未经授权的访问和窃取。
DES(Data Encryption Standard,中文:数据加密标准),是一种对称加密算法。该算法在1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并于1977年被发布,随后在国际上广泛流传开来。然而,随着计算机的进步,DES 已经能够被暴力破解,所以该算法已经不安全了。
DES是一种分组密码(Block Cipher,或者叫块加密),即将明文按64比特进行分组加密,每组生成64位比特的密文。它的密钥长度为56比特(从规格上来说,密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实际长度为56比特)。
以下是使用DES算法进行对称加密的基本过程:
加密过程
选择密钥: 选择一个56位的密钥,这是DES算法的标准密钥长度。
初始化: 将明文消息进行初始化处理,以确保其长度符合DES算法的要求。通常,如果明文消息的长度不是64位的倍数,会使用填充(Padding)技术进行填充。
分组: 将初始化后的明文消息分成64位(8字节)的分组。
初始置换(Initial Permutation): 对每个分组应用初始置换,该置换将每个分组中的位重新排列。这是DES算法的一部分,目的是增加密码的强度。
轮函数(Round Function): 将初始置换后的分组输入到轮函数中。轮函数会使用子密钥对分组进行一系列的变换,包括置换、替换和移位等操作。
轮加密(Round Encryption): 对轮函数的输出进行轮加密操作,使用不同的子密钥对每个轮进行加密。
最后一轮加密: 当所有轮完成后,得到的结果被输入到最后一轮加密中,产生最终的密文。
解密过程
选择密钥: 与加密过程相同,选择相同的56位密钥。
初始化: 将密文消息进行初始化处理。
分组: 将初始化后的密文消息分成64位的分组。
初始逆置换(Initial Permutation Inverse): 对每个分组应用初始逆置换,这是初始置换的逆操作。
轮函数逆操作: 将初始逆置换后的分组输入到轮函数逆操作中。这是轮函数的逆操作,将使用与加密过程相同的子密钥进行逆操作。
轮解密: 对轮函数逆操作的输出进行轮解密操作,使用不同的子密钥对每个轮进行解密。
最后一轮解密: 当所有轮完成后,得到的结果被输入到最后一轮解密中,产生最终的明文。
需要注意的是,DES算法是一种经典的对称加密算法,但由于其密钥长度较短且存在一些安全漏洞,已经不再推荐用于安全通信。更安全的替代算法包括AES(高级加密标准)。
这里我使用一个简单的例子来演示使用DES算法进行对称加密的过程,帮助大家理解。
假设我们有以下信息需要进行加密:
明文消息: "HELLO WORLD"
密钥: "SECRETKEY" (这个密钥需要进行处理才能符合DES算法的要求,但为了简化,我们假设密钥已经符合要求)
现在我们将使用DES算法对这条消息进行加密。
加密过程:
1. 初始化: 将明文消息进行初始化处理。
明文消息:"HELLO WORLD"
2. 分组: 将初始化后的明文消息分成64位(8字节)的分组。
分组1:"HELLO WO"
分组2:"RLDXXXXX"(填充字节)
3. 初始置换: 对每个分组应用初始置换,重新排列分组中的位。
对分组1进行初始置换后的结果:"WHELO OL"
对分组2进行初始置换后的结果:"XXXDRLLL"
4. 轮加密: 将初始置换后的分组输入到DES的轮函数中进行轮加密操作。
对分组1进行轮加密后的结果:"6A25D1B3"
对分组2进行轮加密后的结果:"3E14F35C"
5. 最后一轮加密: 将轮加密后的结果进行最后一轮加密,得到最终的密文。
最终密文:"6A25D1B3 3E14F35C"
解密过程:
解密过程与加密过程相反,首先对密文进行初始逆置换,然后将结果输入到DES算法的轮函数逆操作中进行解密,最后进行轮解密和最后一轮解密操作,得到原始的明文消息。
需要注意的是:由于DES算法是一种块密码算法,因此如果消息的长度不是64位的倍数,需要进行填充。此外,实际上的DES密钥通常需要进行处理以符合算法的要求,但在这个例子中我们简化了这个过程。
3DES是DES(Data Encryption Standard)的一种变体,它使用了三个DES密钥对数据进行多轮加密,以提高安全性。3DES可以提供比单个DES更高的安全性,同时保持了与DES兼容的加密解密过程。
在3DES中,密钥是由三个56位的DES密钥组成,总共为168位。这三个密钥分别用作加密的第一轮、第二轮和第三轮。由于DES密钥的长度是56位,但实际上只有其中的 64 位被用于加密,因此每个56位的密钥中有8位用作奇偶校验位。
3DES的加密过程与DES的加密过程类似,但它使用了三个密钥和多次轮加密。下面是3DES的加密过程:
注意:3DES的加密过程,并不是进行三次DES加密(加密→加密→加密),而是以密钥1、密钥2、密钥3的顺序,进行加密→解密→加密的过程。
3DES的解密过程与加密过程相反,它使用相同的三个密钥和相反的操作来还原原始消息。解密过程包括初始逆置换、轮解密和最后一轮解密。
优点:
缺点:
总的来说,3DES是一种经典的对称加密算法,它在一定程度上提高了数据的安全性,但由于加密速度较慢和密钥管理复杂等问题,现在逐渐被更先进的加密算法所取代。
我们通过一个简单的例题来理解3DES算法的加密和解密过程。
例题:
假设我们有以下信息需要进行加密和解密:
明文消息: "HELLO"
密钥: "SECRETKE"(假设为了简化,密钥已经符合DES算法的要求)
加密过程:
1. 选择密钥:使用密钥 "SECRETKE"。
2. 初始化:将明文消息 "HELLO" 进行初始化处理。
3. 分组:将初始化后的明文消息分成64位(8字节)的分组。
- 分组1:"HELLOXXX" ("XXX" 代表填充字节,以确保分组长度为64位)
4. 初始轮密钥加: 将明文与第一个密钥进行一次轮密钥加操作。
- 初始轮密钥加后的结果:"ABCDNABC"(假设加密结果)
5. 轮加密: 将初始轮密钥加后的消息输入到轮函数中进行轮加密操作。假设我们执行3轮加密。
- 第1轮加密后的结果:"WXYZPQRS"
- 第2轮加密后的结果:"MNOPQRST"
- 第3轮加密后的结果:"EFGHIJKL"
6. 最后一轮加密: 使用第3轮加密后的结果作为最终的密文。
最终密文:"EFGHIJKL"
解密过程:
1. 选择密钥:使用相同的密钥 "SECRETKE"。
2. 初始逆置换:对密文消息进行初始逆置换。
- 初始逆置换后的密文:"ABCDNABC"
3. 轮解密:将初始逆置换后的密文消息输入到轮函数中进行轮解密操作。假设我们执行3轮解密。
- 第1轮解密后的结果:"XYZWXYZV"
- 第2轮解密后的结果:"OPQNPQRN"
- 第3轮解密后的结果:"HIJKLMNO"
4. 最后一轮解密:使用第3轮解密后的结果作为最终的明文。
最终明文:"HIJKLMNO"
通过这个例题,我们可以看到3DES算法的加密和解密过程。每一轮加密和解密都使用了相同的密钥,但是顺序和操作相反,以确保数据的安全性。
AES(Advanced Encryption Standard,高级加密标准)是一种对称密钥加密算法,用于加密和解密数据。它是目前广泛应用的密码学标准之一,被美国政府采用作为保护敏感数据的加密标准,也被许多企业和组织所采用。
AES算法采用了分组密码的设计,它将输入数据分成固定长度的块,并使用相同长度的密钥来对每个块进行加密和解密。AES算法支持多种密钥长度,包括128位、192位和256位。
AES算法的特点包括:
AES算法的基本原理是将输入数据通过一系列的置换、替换和混淆操作,与密钥进行轮轮加密,从而产生密文。解密过程则是对密文进行相反的操作,使用相同的密钥来还原原始数据。AES算法的加密和解密过程都是相同的,只是在轮密钥的生成和使用方面有所不同。
总的来说,AES算法是一种安全、高效且广泛应用的对称加密算法,适用于保护敏感数据和通信的安全性。
加密过程:
1. 密钥扩展(Key Expansion):
AES算法使用密钥扩展算法将输入的密钥转换为轮密钥(Round Keys)。这些轮密钥将用于加密和解密过程中的每一轮。密钥扩展算法通过迭代应用密钥调度算法,从而生成多个轮密钥。
2. 初始加密(Initial Round):
在初始加密阶段,明文数据被分成固定大小的块,并且与第一轮的轮密钥进行加密。这一步通常涉及一些基本的操作,如AddRoundKey(轮密钥加)。
3. 轮加密(Round Encryption):
AES算法的核心是多轮加密过程。在每一轮中,明文数据经历四个变换步骤:SubBytes、ShiftRows、MixColumns和AddRoundKey。这些变换步骤将明文数据转换为密文数据,并确保加密后的数据具有良好的扩散性和混淆性。
4. 最后一轮加密(Final Round):
在最后一轮加密中,不再执行MixColumns步骤,只执行SubBytes、ShiftRows和AddRoundKey步骤。这是因为MixColumns步骤的目的是增加扩散性,但在最后一轮加密中已经不再需要。
5. 密文输出(Cipher Output):
最后,经过多轮加密后得到的密文数据即为加密后的结果。
解密过程:
解密过程与加密过程相似,但是使用的是相反的操作和轮密钥。解密过程包括轮解密和初始解密,其中轮解密包括SubBytes、ShiftRows、MixColumns和AddRoundKey步骤,而初始解密只包括AddRoundKey步骤。
通过这些步骤,原始的明文数据将被转换为密文数据,或者反之,以实现数据的加密和解密。AES算法的设计目标是提供高效、安全且可靠的数据加密和解密功能,使其成为广泛应用的加密标准之一。
我们通过一个例题来理解AES(Advanced Encryption Standard)算法的加密和解密过程。
例题:
假设我们有以下信息需要进行加密和解密:
明文消息: "HELLO"
密钥: "SECRETKEY"(假设为了简化,密钥已经符合AES算法的要求)
加密过程:
1. 选择密钥: 使用密钥 "SECRETKEY"。
2. 初始化: 将明文消息 "HELLO" 进行初始化处理。
3. 分组: 将初始化后的明文消息分成128位(16字节)的分组。
- 分组1:"HELLOXXXXXXX" ("X" 代表填充字节,以确保分组长度为128位)
4. 轮加密: 将每个分组输入到AES算法的轮函数中进行轮加密操作。假设我们执行10轮加密。
- 第1轮加密后的结果:"UODSNDJDIWFK..."
- 第2轮加密后的结果:"XOWHDHDJDIWFK..."
- 第3轮加密后的结果:"ASKDNJDJFWKX..."
- 以此类推...
5. 最后一轮加密: 使用第10轮加密后的结果作为最终的密文。
最终密文:"ASKDNJDJFWKX..."
解密过程:
1. 选择密钥: 使用相同的密钥 "SECRETKEY"。
2. 初始逆置换: 对密文消息进行初始逆置换。
- 初始逆置换后的密文:"UODSNDJDIWFK..."
3. 轮解密: 将初始逆置换后的密文消息输入到AES算法的轮函数逆操作中进行轮解密操作。假设我们执行10轮解密。
- 第1轮解密后的结果:"HELLOXXXXXXX"
- 第2轮解密后的结果:"HELLOXXXXXXX"
- 第3轮解密后的结果:"HELLOXXXXXXX"
- 以此类推...
4. 最后一轮解密: 使用第10轮解密后的结果作为最终的明文。
最终明文:"HELLO"
通过这个例题,我们可以看到AES算法的加密和解密过程。AES算法使用相同的密钥进行加密和解密,但是加密和解密的操作是相反的,以确保数据的安全性。AES算法是一种现代的对称加密算法,被广泛应用于保护敏感数据。
对称加密和哈希函数都是常见的加密技术,它们在保护数据安全和保障信息完整性方面扮演着不同的角色。虽然它们有一些共同点,但也有一些明显的区别。
1. 用途:
- 对称加密用于加密和解密数据,确保数据在传输或存储过程中的保密性。
- 哈希函数用于生成数据的固定长度摘要,通常用于数据的完整性校验和验证,以及密码存储(如存储加盐哈希密码)。
2. 输出类型:
- 对称加密的输出是密文,它与明文具有相同的数据格式,只是经过了加密转换。
- 哈希函数的输出是固定长度的摘要,无论输入数据的大小如何,输出的摘要长度始终是固定的。
3. 可逆性:
- 对称加密是可逆的,可以使用相同的密钥对密文进行解密,还原为原始的明文。
- 哈希函数是不可逆的,即使知道输入数据和哈希值,也很难反向推导出原始数据。
1. 综合应用: 在实际应用中,对称加密和哈希函数经常结合使用,以提供更全面的数据安全保障。例如,在密码存储中,通常会使用哈希函数对密码进行哈希处理存储在数据库中,而在传输过程中,则使用对称加密技术来加密敏感数据。
2. 数据完整性验证: 在数据传输或存储过程中,可以使用哈希函数生成数据的摘要,并将摘要附加到数据中。接收方可以使用相同的哈希函数对接收到的数据计算摘要,并与发送方提供的摘要进行比较,以验证数据的完整性。
综上所述,对称加密和哈希函数在数据安全方面发挥着不同但相辅相成的作用,通过它们的综合应用可以提供更全面的数据保护和安全性。
五.结语
之后会持续跟进这方面知识内容,以上内容可能不是很完整,大家也可以看看其他文章内容进行对比。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。