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

Python中如何使用RSA加密算法保护敏感数据

发布时间:2023-12-23 05:35:09

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,能够使用公钥进行加密,使用私钥进行解密。RSA算法的安全性基于质因数分解的难题,因为目前没有有效的方法可以在合理的时间内分解大质数的乘积。

在Python中,我们可以使用cryptography库来实现RSA加密算法。下面是一个使用RSA加密算法保护敏感数据的示例。

首先,我们需要安装cryptography库。在命令行中执行以下命令:

pip install cryptography

接下来,我们可以编写一个函数来生成RSA的公钥和私钥对,并保存到文件中。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa

def generate_key_pair():
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048,
        backend=default_backend()
    )
    
    private_pem = private_key.private_bytes(
        serialization.Encoding.PEM,
        serialization.PrivateFormat.PKCS8,
        encryption_algorithm=serialization.BestAvailableEncryption(b'mypassword')
    )
    
    with open('private_key.pem', 'wb') as f:
        f.write(private_pem)
    
    public_key = private_key.public_key()
    public_pem = public_key.public_bytes(
        serialization.Encoding.PEM,
        serialization.PublicFormat.SubjectPublicKeyInfo
    )
    
    with open('public_key.pem', 'wb') as f:
        f.write(public_pem)

上述函数生成一个私钥和公钥,并将其保存到private_key.pempublic_key.pem文件中。生成的私钥使用了密码保护。

接下来,我们可以编写函数来使用公钥对敏感数据进行加密。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

def encrypt_data(data):
    with open('public_key.pem', 'rb') as f:
        public_pem = f.read()
        public_key = serialization.load_pem_public_key(public_pem, backend=default_backend())

    encrypted_data = public_key.encrypt(
        data.encode(),
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    
    return encrypted_data

上述函数使用公钥对传入的数据进行加密,并返回加密后的数据。

最后,我们可以编写函数来使用私钥对加密数据进行解密。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import padding

def decrypt_data(encrypted_data):
    with open('private_key.pem', 'rb') as f:
        private_pem = f.read()
        password = b'mypassword'
        private_key = serialization.load_pem_private_key(private_pem, password, backend=default_backend())

    decrypted_data = private_key.decrypt(
        encrypted_data,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    
    return decrypted_data.decode()

上述函数使用私钥对传入的加密数据进行解密,并返回解密后的数据。

现在,我们可以使用上述函数对敏感数据进行加密和解密。

data = "Hello, world!"

# 生成密钥对
generate_key_pair()

# 加密数据
encrypted_data = encrypt_data(data)
print("加密后的数据:", encrypted_data)

# 解密数据
decrypted_data = decrypt_data(encrypted_data)
print("解密后的数据:", decrypted_data)

运行上述代码,我们可以看到输出的是加密和解密后的数据。

通过使用RSA加密算法,我们能够保护敏感数据在传输和存储过程中的安全性,避免敏感数据的泄露。但需要注意的是,RSA算法相对较慢,适用于较小的数据加密。对于大规模数据的加密,可以考虑使用对称加密算法。因此,在实际应用中,需要根据具体需求选择合适的加密算法。