欢迎访问宙启技术站
智能推送

Python实现简单的加密和解密算法

发布时间:2023-12-04 20:21:47

加密算法是将原始数据转化为不可读的形式,解密算法则是将加密后的数据转化为可读的形式。Python中,常用的加密算法包括对称加密算法和非对称加密算法。

对称加密算法使用相同的密钥进行加密和解密,常见的对称加密算法有DES、AES等。下面是使用AES算法进行加密和解密的示例代码:

from Crypto.Cipher import AES

def encrypt(key, data):
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_data = cipher.encrypt(pad(data))
    return encrypted_data

def decrypt(key, encrypted_data):
    cipher = AES.new(key, AES.MODE_ECB)
    decrypted_data = cipher.decrypt(encrypted_data)
    return unpad(decrypted_data)

def pad(data):
    # 对数据进行填充,使其长度为AES的倍数
    length = AES.block_size
    pad_length = length - (len(data) % length)
    data += chr(pad_length) * pad_length
    return data

def unpad(data):
    # 对填充的数据进行去除
    pad_length = ord(data[-1])
    return data[:-pad_length]

# 使用AES算法进行加密和解密
key = b'16byteslongkey!'
data = b'some secret data'

encrypted_data = encrypt(key, data)
decrypted_data = decrypt(key, encrypted_data)

print('Encrypted data:', encrypted_data)
print('Decrypted data:', decrypted_data)

上面的代码中,我们使用了Python的Crypto.Cipher模块,导入了AES算法。encrypt()函数使用AES的ECB模式(电码本模式)对数据进行加密,decrypt()函数对加密后的数据进行解密。

需要注意的是,AES算法的密钥长度必须为16、24或32个字节(128、192或256位)。我们在这个例子中使用了一个16字节的密钥。

非对称加密算法使用一对密钥,分别为公钥和私钥。常见的非对称加密算法有RSA、DSA等。下面是使用RSA算法进行加密和解密的示例代码:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

def encrypt(public_key_path, data):
    with open(public_key_path, 'rb') as f:
        public_key = RSA.importKey(f.read())

    cipher = PKCS1_OAEP.new(public_key)
    encrypted_data = cipher.encrypt(data)
    return encrypted_data

def decrypt(private_key_path, encrypted_data):
    with open(private_key_path, 'rb') as f:
        private_key = RSA.importKey(f.read())

    cipher = PKCS1_OAEP.new(private_key)
    decrypted_data = cipher.decrypt(encrypted_data)
    return decrypted_data

# 使用RSA算法进行加密和解密
public_key_path = 'public.pem'
private_key_path = 'private.pem'
data = b'some secret data'

encrypted_data = encrypt(public_key_path, data)
decrypted_data = decrypt(private_key_path, encrypted_data)

print('Encrypted data:', encrypted_data)
print('Decrypted data:', decrypted_data)

上面的代码中,我们使用了Python的Crypto.PublicKeyCrypto.Cipher模块,导入了RSA算法。encrypt()函数使用了RSA的PKCS1_OAEP模式(加密填充模式),对数据进行加密,decrypt()函数对加密后的数据进行解密。

需要注意的是,在这个例子中我们使用了公钥和私钥文件,分别是public.pemprivate.pem。你可以使用openssl工具生成RSA公钥和私钥对:

$ openssl genrsa -out private.pem 2048
$ openssl rsa -pubout -in private.pem -out public.pem

生成了公钥和私钥文件之后,你可以把公钥文件发送给其他人,用于加密数据,而私钥文件需要保密,用于解密数据。

总结来说,Python提供了丰富的库和模块用于实现加密和解密算法。使用这些算法可以保护数据的安全性,防止数据在传输过程中被篡改或窃取。在实际应用中,你可以根据具体的需求和场景选择合适的加密算法。