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

使用OAEP进行数据加密与解密的Python代码示例

发布时间:2024-01-12 21:49:39

OAEP(Optimal Asymmetric Encryption Padding)是一种公钥加密算法的填充模式,用于增加数据的安全性。它通过对输入数据进行填充和哈希操作,以保护数据的机密性和完整性。

下面是一个使用OAEP进行数据加密与解密的Python代码示例:

import hashlib
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric import rsa


# 生成RSA密钥对
def generate_rsa_key_pair():
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048
    )
    public_key = private_key.public_key()
    return private_key, public_key


# 使用公钥进行数据加密
def encrypt_data(data, public_key):
    # 使用OAEP填充模式,使用SHA-256哈希算法
    encryptor = public_key.encryptor(padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    ))
    encrypted_data = encryptor.update(data) + encryptor.finalize()
    return encrypted_data


# 使用私钥进行数据解密
def decrypt_data(encrypted_data, private_key):
    # 使用OAEP填充模式,使用SHA-256哈希算法
    decryptor = private_key.decryptor(padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    ))
    decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()
    return decrypted_data


# 示例使用
if __name__ == "__main__":
    # 生成RSA密钥对
    private_key, public_key = generate_rsa_key_pair()

    # 要加密的数据
    data = b"Hello, world!"

    # 使用公钥进行加密
    encrypted_data = encrypt_data(data, public_key)
    print("Encrypted Data:", encrypted_data)

    # 使用私钥进行解密
    decrypted_data = decrypt_data(encrypted_data, private_key)
    print("Decrypted Data:", decrypted_data)

在上述示例中,我们首先使用generate_rsa_key_pair函数生成了一个RSA密钥对(包括私钥和公钥)。然后,我们定义encrypt_data函数用于使用公钥对数据进行加密,以及decrypt_data函数用于使用私钥对数据进行解密。

最后,在示例使用部分,我们首先定义了要加密的数据data,然后使用公钥调用encrypt_data函数对其进行加密,得到encrypted_data。接下来,我们使用私钥调用decrypt_data函数对encrypted_data进行解密,得到解密后的数据decrypted_data。最后,我们分别打印出加密和解密后的数据。

此外,在代码中我们使用了cryptography库来实现RSA加密算法。该库提供了丰富的密码学原语和算法以及易用的API,可以帮助我们实现安全的加密和解密操作。

需要注意的是,上述示例中的数据类型为字节串(bytes),在实际应用中可以根据需要将数据转换为字节串进行加密和解密操作。