Python中常见的加密解密算法总结

  • Post category:Python

Python中常见的加密解密算法总结

在计算机安全领域,加密解密算法是非常重要的一部分。Python提供了许多加密解密算法的库,可以帮助我们实现各种加密密算法。在本文中,我们将介绍Python中常见的加密解密算法,并提供示例说明。

常见的加密密算法

1. 对称加密算法

对称加密算法是一种加密解密算法,它使用相同的密进行加密和解密。常见的对称加密算法包括AES、DES、3DES等。

示例1:使用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')
    pad = 16 - len(data) % 16
    data += bytes([pad] * pad)
    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)
    pad = plaintext[-1]
    plaintext = plaintext[:-pad]
    return plaintext.decode('utf-8')

key = b'0123456789abcdef'
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算法对数据进行加密和解密。我们首先定义了一个名为aes_encrypt的函数,它接受两个参数key和data,分别表示密钥和要加密的数据。我们使用AES.new创建一个AES对象,并使用ECB模式进行加密。我们使用utf-8编码将数据转换为字节,并使用填充将其填充到16字节的倍数。然后,我们使用cipher.encrypt对数据进行加密,并使用base64编码将其转换为字符串。

然后,我们定义了一个名为aes_decrypt的函数,它接受两个参数key和data,分别表示密钥和要解密的数据。我们使用AES.new创建一个AES对象,并使用ECB模式进行解密。我们使用base64解码将数据转换为字节,并使用cipher.decrypt对其进行解密。最后,我们使用填充将解密后的数据还原为原始数据。

示例2:使用DES加密解密

from Crypto.Cipher import DES
import base64

def des_encrypt(key, data):
    cipher = DES.new(key, DES.MODE_ECB)
    data = data.encode('utf-8')
    pad = 8 - len(data) % 8
    data += bytes([pad] * pad)
    ciphertext = cipher.encrypt(data)
    return base64.b64encode(ciphertext).decode('utf-8')

def des_decrypt(key, data):
    cipher = DES.new(key, DES.MODE_ECB)
    data = base64.b64decode(data)
    plaintext = cipher.decrypt(data)
    pad = plaintext[-1]
    plaintext = plaintext[:-pad]
    return plaintext.decode('utf-8')

key = b'01234567'
data = 'Hello, world!'
encrypted_data = des_encrypt(key, data)
print('Encrypted data:', encrypted_data)
decrypted_data = des_decrypt(key, encrypted_data)
print('Decrypted data:', decrypted_data)

在这个示例中,我们使用DES算法对数据进行加密和解密。我们首先定义了一个名为des_encrypt的函数,它接受两个参数key和data,分别表示密钥和要加密的数据。我们使用DES.new创建一个对象,并使用ECB模式进行加密。我们使用utf-8编码将数据转换为字节,并使用填充将其填充到8字节的倍数。然后,我们使用cipher.encrypt对数据进行加密,并使用base64编码将其转换为字符串。

然后,我们定义了一个名为des_decrypt的函数,它接受两个参数key和data,分别表示密钥和要解密的数据。我们使用DES.new创建一个DES对象,并使用ECB模式进行解密。我们使用base64解码将数据转换为字节,并使用cipher.decrypt对其进行解密。最后,我们使用填充将解密后的数据还原为原始数据。

2. 非对称加密算法

非对称加密算法是一种加密解密算法,它使用公钥和私钥进行加密和解密。常见的非对称加密算法包括RSA、DSA等。

示例3:使用RSA加密解密

“`python
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64

def rsa_encrypt(public_key, data):
key = RSA.import_key(public_key)
cipher = PKCS1_v1_5.new(key)
data = data.encode(‘utf-8’)
ciphertext = cipher.encrypt(data)
return base64.b64encode(ciphertext).decode(‘utf-8’)

def rsa_decrypt(private_key, data):
key = RSA.import_key(private_key)
cipher = PKCS1_v1_5.new(key)
data = base64.b64decode(data)
plaintext = cipher.decrypt(data, None)
return plaintext.decode(‘utf-8’)

public_key = ”’—–BEGIN PUBLIC KEY—–
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ
zJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJ