浅谈对称加密(AES与DES)

浅谈对称加密(AES与DES)

浅谈对称加密(AES与DES)对称加密是一种加密方式,其中同一个密钥(也称为私钥或共享密钥)用于加密和解密数据。这意味着加密和解密都使用相同的密钥。对称加密速度通常很快,因为它不涉及复杂的数学运算。

对称加密的示例步骤:

选择密钥:双方协商并选择一个密钥,在实际应用中确保密钥的安全性至关重要。

加密数据:使用所选密钥对明文数据进行加密,生成密文。

传输密文:将密文传输给接收方。

解密数据:接收方使用相同的密钥对接收到的密文进行解密,还原出原始明文数据。

对称加密算法有许多种,如 AES(高级加密标准)、DES(数据加密标准)等。在对称加密中,由于加密和解密使用相同的密钥,因此密钥的安全传输和存储对于确保数据机密性至关重要。

安装:

pip3 install pycrpytodome

AES(Advanced Encryption Standard)是一种对称密钥加密算法,最常用的模式ECB 模式和CBC模式,当然还有很多其他模式,都属于AES加密。ECB模式和CBC模式两者区别就是ECB不需要iv偏移量,而CBC需要。

在 AES 加密中,ECB(Electronic Codebook)模式和 CBC(Cipher Block Chaining)模式是两种常见的加密模式。以下是它们的参数、作用以及数据类型:

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

参数:

密钥(Key):对称密钥,用于加密和解密数据块。

初始向量(IV):在 ECB 模式下通常不需要使用初始向量。

作用:

将明文分成固定大小的数据块,然后独立地对每个数据块使用相同的密钥进行加密。

易于实现和理解,适合对数据块进行独立加密的场景。

数据类型:

明文(Plaintext):待加密的原始数据。

密文(Ciphertext):经过 ECB 模式加密后的数据。

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

1. **参数**:

- **密钥(Key)**:对称密钥,用于加密和解密数据块。

- **初始向量(IV)**:每次加密操作都需要一个唯一的初始向量,用于在数据块之间引入依赖性。

2. **作用**:

- 在加密之前,与前一个数据块的密文进行异或运算,增加了数据块之间的关联性,提高了安全性。

- 使得每个密文块的输出都依赖于前一个数据块的加密结果,因此有更好的混淆效果。

3. **数据类型**:

- **明文(Plaintext)**:待加密的原始数据。

- **密文(Ciphertext)**:经过 CBC 模式加密后的数据。

这些是 AES 加密中 ECB 和 CBC 模式的主要参数、作用和数据类型。选择合适的加密模式取决于具体的安全需求和应用场景。

CBC加密案例

from Crypto.Cipher import AES

import base64

key = '1234567890abcdef'.encode() # 密钥

# 密钥:必须是16位字节或者24位字节或者32位字节

text = 'philips is dsb!!'

# text = 'philips is dsb' 需要加密的内容

# while len(text.encode('utf-8')) % 16 != 0: # 如果text不足16位的倍数就用空格补足16位

# text += '\0'

text = text.encode()

print('完整text:', text)

iv = b'abcdabcdabcdabcd' # 偏移量--必须16字节

aes = AES.new(key, AES.MODE_CBC, iv) # 创建一个aes对象

en_text = aes.encrypt(text) # 加密明文

print('aes加密数据:::', en_text)

en_text = base64.b64encode(en_text).decode() # 将返回的字节型数据转进行base64编码

print(en_text)

运行结果如下:

完整text: b'philips is dsb!!'

aes加密数据::: b'\xb0\x8fxbf1\xec\xfaW\xc5o\xa5\xa5\xc1_\x0f'

sI94YmYx7PpXxW+lpcFfDw==

CBC解密案例:

from Crypto.Cipher import AES

import base64

key = '1234567890abcdef'.encode() # 密钥

model = AES.MODE_CBC

iv = b'abcdabcdabcdabcd'

aes = AES.new(key, model, iv)

text = 'SrACs3J3tfAONPPwxzMMfg=='.encode()

ecrypted_base64 = base64.b64decode(text) # base64解码成字节流

str = aes.decrypt(ecrypted_base64).decode() # 解密

print('aes解密数据:::', str)

运行结果如下:

aes解密数据::: phips is dsb!!!!

本示例可以在[小蜜蜂AI网站]获取。

相关文章

Win11正版密钥能用多长时间?购买后长期有效吗?
渋字成语接龙词大全,包含渋字的成语
正规365娱乐平台

渋字成语接龙词大全,包含渋字的成语

⌛ 09-14 💥 5628
对抗网络GAN详解:GAN训练不稳定解决方法、GAN中使用的深度学习技巧、GAN使用任务领域、GAN资料大全整理