DES、AES简介

2023-12-26 20:28:44
DES简介

DES(Data Encryption Standard)是一种对称加密算法,1977年被美国国家标准局(NIST)确定为联邦信息处理标准(FIPS),并作为商用数据加密标准。DES使用56位密钥和64位的分组长度,通过一系列置换、替换和移位等操作来实现加密和解密。

DES的加密过程包括初始置换、16轮的Feistel网络运算和最终置换三个步骤。初始置换将64位明文按照固定的规则重新排列,然后进入16轮的Feistel网络运算,在每一轮中使用不同的48位子密钥进行扩展、置换和替换操作,最后进行最终置换得到密文。

DES的主要特点包括:

固定的块大小和密钥长度:64位的数据块和56位的密钥长度。
16轮的Feistel网络结构:每轮使用不同的子密钥进行操作,增加了加密的复杂性。
置换、替换和移位操作:通过这些操作混淆数据,增加了加密的随机性。
作为商用加密标准:DES曾经是商用加密领域的主流标准,但由于密钥长度较短,易受到暴力破解攻击。
尽管DES曾经是商用加密标准,但随着计算机算力的提升以及密码学技术的发展,DES的安全性逐渐受到挑战。因此,在实际应用中,通常会选择更安全的加密算法,如AES(Advanced Encryption Standard),来替代DES。

AES简介

AES(Advanced Encryption Standard)是一种对称加密算法,被广泛应用于保护敏感数据的安全性。AES算法由比利时密码学家Joan Daemen和Vincent Rijmen设计,2001年被美国国家标准技术研究所(NIST)确定为替代DES的新的加密标准。

AES算法使用128位、192位或256位的密钥长度,并且固定的块大小为128位。AES算法的加密过程包括字节替换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)等步骤,经过多轮的处理后得到密文。

AES的主要特点包括:

可变的密钥长度:支持128位、192位和256位三种密钥长度,提供了更高的安全性选择。
固定的块大小:所有版本的AES都使用128位的数据块长度,确保了加密操作的一致性和效率。
多轮的加密结构:AES使用不同轮数的处理来提高加密的强度,128位密钥长度的AES使用10轮加密,192位和256位分别使用12轮和14轮加密。
高效的软件和硬件实现:AES算法的设计考虑了各种平台上的高效实现,使其成为广泛应用的加密标准。
由于AES算法的高安全性和高效性,在许多领域得到了广泛的应用,包括网络通信、数据库加密、文件加密等。AES已成为目前最为流行的对称加密算法之一,并在许多国家和组织的安全标准中得到了采用。

加密流程图

**输入明文
|
初始轮操作(AddRoundKey)
|

轮迭代
|
字节替代(SubBytes)
|
行移位(ShiftRows)
|
列混淆(MixColumns)
|
轮密钥加(AddRoundKey)
|

最后一轮操作
|

输出密文
**

解密流程图

**输入密文
|
最后一轮操作
|

轮迭代
|
逆字节替代(InvSubBytes)
|
逆行移位(InvShiftRows)
|
逆列混淆(InvMixColumns)
|
轮密钥加(AddRoundKey)
|

初始轮操作(AddRoundKey)
|

输出明文
**

AES 加解密 Python 代码
from Crypto.Cipher import AES

# 设置密钥,必须为 16、24 或 32 字节长度
key = b'secret_key123456'

def aes_encrypt(plain_text):
    # 创建 AES 对象,设置加密模式和密钥
    cipher = AES.new(key, AES.MODE_ECB)
    # 对明文进行填充
    plain_text += (AES.block_size - len(plain_text) % AES.block_size) * '\0'
    # 加密明文并返回结果
    return cipher.encrypt(plain_text.encode())

def aes_decrypt(cipher_text):
    # 创建 AES 对象,设置解密模式和密钥
    cipher = AES.new(key, AES.MODE_ECB)
    # 解密密文并去除填充
    plain_text = cipher.decrypt(cipher_text).decode().rstrip('\0')
    # 返回明文结果
    return plain_text

以上示例代码仅供参考,实际应用中需要根据具体需求进行修改和优化

DES 的加密模式和填充方式

对于 DES 和 AES 加密算法,它们都有不同的加密模式(mode)和填充方式(padding)可供选择。这些选项可以根据具体的安全需求和系统要求进行调整。

加密模式(Mode)
1、ECB(Electronic Codebook)电子密码本模式:
  • 将明文分成固定大小的块,每个块独立加密。
  • 相同的明文块会得到相同的密文块,可能泄露信息。
  • 不适合加密大量数据或需要保密性的数据。
  • CBC(Cipher Block Chaining)密码分组链接模式:
2、每个明文块与前一个密文块进行异或运算,增加了随机性。
  • 需要初始化向量(IV)来增强安全性。
  • 适合保密性要求较高的数据。
3、CFB(Cipher Feedback)密码反馈模式:
  • 将前一个密文块作为密钥流的输入。
  • 可以实现比块更小的加密。
  • 适合流式数据加密。
4、OFB(Output Feedback)输出反馈模式:
  • 将前一个密文块作为输入,输出一个密钥流。
  • 只需要加密器,不需要解密器。
  • 适合流式数据加密。
5、CTR(Counter)计数器模式:
  • 使用一个计数器和密钥产生密钥流。
  • 可以实现并行加密和流式加密。
  • 适合硬件实现和并行处理。
6、GCM(Galois/Counter Mode)伽罗瓦/计数器模式:
  • 结合了CTR模式和GMAC(Galois Message Authentication Code)。
  • 提供验证和加密的功能。
  • 适合需要验证和加密的场景。
填充方式(Padding)
1、PKCS5Padding 和 PKCS7Padding:
  • 在加密前对数据进行填充,使得数据块长度符合加密算法的要求。
  • PKCS7Padding 是 PKCS5Padding 的扩展版本,用于填充块大小为8位字节的数据块。
2、ZeroPadding:
  • 在数据块末尾填充零字节,使得数据块长度符合加密算法的要求。
3、ISO10126Padding:
  • 在数据块末尾填充随机数据,最后一个字节表示填充的长度。
4、ANSI X.923 填充方式:
  • 类似于ISO10126Padding,但最后一个字节表示填充的长度。

在选择加密模式和填充方式时,需要根据具体的安全需求、数据类型和系统要求进行权衡和选择。不同的模式和填充方式具有不同的特性和适用场景,因此需要根据实际情况进行合理的选择。

文章来源:https://blog.csdn.net/andrew_wf/article/details/135229854
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。