Python3对称加密算法AES、DES3实例详解

  • Post category:Python

下面是详细讲解“Python3对称加密算法AES、DES3实例详解”的完整攻略,包括算法原理、Python实现和两个示例。

算法原理

对称加密算法是种常用的加密算法,其基本思想是使用同一个密钥对数据进行加密和解密。常用的对称加密算法包括AES、DES、3DES等。其中,AES是一种高级加密标准,其基本思想是使用一个密钥对数据进行加密和解密,密钥长度可以是128位、192位或256位。3DES是一种基于DES算法的加密算法,其基本思想是使用三个密钥对数据进行加密和解密,密钥长度为168位。具步骤如下:

  1. 选择合适的密钥长度和加密模式;
  2. 使用密钥对数据进行加密;
  3. 使用密钥加密后的数据进行解密。

Python实现代码

以下是Python实现AES、DES3对称加密算法的示例代码:

AES加密算法

from Crypto.Cipher import AES
import base64

# 加密函数
def aes_encrypt(key, data):
    cipher = AES.new(key, AES.MODE_ECB)
    data = data.encode('utf-8')
    data = data + (AES.block_size - len(data) % AES.block_size) * b'\0'
    ciphertext = cipher.encrypt(data)
    return base64.b64encode(ciphertext).decode('utf-8')

# 解密函数
def aes_decrypt(key, data):
    cipher = AES.new(key, AES.MODE_ECB)
    data = base64.b64decode(data)
    plaintext = cipher.decrypt(data).rstrip(b'\0')
    return plaintext.decode('utf-8')

上述代码中,首先导入Crypto.Cipher模块然后定义了aes_encryptaes_decrypt两个函数,分别表示AES加密和解密函数。在加密函数中,使用AES.new函数创建一个AES加密对象,然后将数据转换为字节流,并使用b'\0'进行填充,使长度为AES块大小的整数倍。接着,使用encrypt方法对数据进行加密,并使用base64.b64encode函数进行编码。在解密函数中,使用AES.new函数创建一个AES解密对象,然后使用base64.b64decode函数对数据进行解码。接着,使用decrypt方法对数据进行解密,并使用“函数去除填充的空字节。

DES3加密算法

from Crypto.Cipher import DES3
import base64

# 加密函数
def des3_encrypt(key, data):
    cipher = DES3.new(key, DES3.MODE_ECB)
    data = data.encode('utf-8')
    data = data + (DES3.block_size - len(data) % DES3.block_size) * b'\0'
    ciphertext = cipher.encrypt(data)
    return base64.b64encode(ciphertext).decode('utf-8')

# 解密函数
def des3_decrypt(key, data):
    cipher = DES3.new(key, DES3.MODE_ECB)
    data = base64.b64decode(data)
    plaintext = cipher.decrypt(data).rstrip(b'\0')
    return plaintext.decode('utf-8')

上述代码中,首先导入Crypto.Cipher模块,然后定义了des3_encrypt和des3_decrypt两个函数,分别表示DES3加密和解密函数。在加密函数中,使用DES3.new函数创建一个DES3加密对象,然后将数据转换为字节流,并使用b’\0′进行填充,使其长度为DES3块大小的数倍。接着,使用encrypt方法对数据进行加密,并使用base64.b64encode函数进行编码。在解密函数中,使用DES3.new函数创建一个DES3解密对象,然后使用base64.b64decode函数对数据进行解码。接着,使用decrypt方法对数据进行解密,并使用rstrip`函数去除填充的空字节。

示例说明

以下两个示,说明如何使用上述代码进行AES、DES3对称加密算法。

示例1

使用AES加密算法对一个字符串进行加密和解密。

# 定义密钥和数据
key = b'1234567890123456'
data = 'Hello, world!'

# 加密数据
encrypted_data = aes_encrypt(key, data)
print("Encrypted data:", encrypted_data)

# 解密数据
decrypted_data = aes_decrypt(key, encrypted_data)
print("Decrypted data:", decrypted_data)

上述代码中,首先定义了密钥和数据,然后使用aes_encrypt函数对数据进行加密,并输出加密后的数据。接着,使用aes_decrypt函数对加密后的数据进行解密,并输出解密后的数据。

示例2

使用DES3加密算法对一个文件进行加密和解密。

# 定义密钥和文件名
key = b'123456789012345678901234'
filename = 'test.txt'

# 加密文件
with open(filename, 'rb') as f:
    data = f.read()
encrypted_data = des3_encrypt(key, data)
with open(filename + '.enc', 'wb') as f:
    f.write(encrypted_data)

# 解密文件
with open(filename + '.enc', 'rb') as f:
    data = f.read()
decrypted_data = des3_decrypt, data)
with open(filename + '.dec', 'wb') as f:
    f.write(decrypted_data)

上述代码中,首先定义了密钥和文件名,然后使用des3_encrypt函数对文件进行加密,并将加密后的数据写入到新文件中。接着,使用des3_decrypt函数对加密后的文件进行解密,并将解密后的数据写入到新文件中。

结束语

本文介绍了Python3对称加密算法AES、DES3实例详解,包括算法原理、Python实现和两个示例说明。对称加密算法是一种常用的加密算法,其基本思想是使用同一个密钥对数据进行加密和解密。在实现中,需要注意选取合适的算法和参数,获得更好的加密效果。