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

使用Python实现RSA算法进行数据加解密操作详解

发布时间:2023-12-24 10:01:25

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于信息安全领域。它利用了大数分解的难题,实现了对数据的加密和解密操作。

RSA算法的核心原理是选择两个较大的质数p和q,计算n=p*q。然后选择一个整数e,满足1<e<φ(n),并且e与φ(n)互质,其中φ(n)=(p-1)*(q-1)。再选择一个整数d,满足d*e=1(mod φ(n))。最后,公钥为(n, e),私钥为(n, d)。

使用Python实现RSA算法可以使用Python的cryptography库。

下面是RSA算法的数据加解密操作的示例代码:

from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding

# 生成RSA公私钥对
def generate_keys():
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048
    )
    public_key = private_key.public_key()

    private_pem = private_key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=serialization.NoEncryption()
    )
    with open('private_key.pem', 'wb') as f:
        f.write(private_pem)

    public_pem = public_key.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.PKCS1
    )
    with open('public_key.pem', 'wb') as f:
        f.write(public_pem)

# 加密数据
def encrypt(data):
    with open('public_key.pem', 'rb') as f:
        public_key = serialization.load_pem_public_key(
            f.read(),
            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

# 解密数据
def decrypt(encrypted_data):
    with open('private_key.pem', 'rb') as f:
        private_key = serialization.load_pem_private_key(
            f.read(),
            password=None,
            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()

# 生成RSA公私钥对
generate_keys()

# 加密数据
encrypted_data = encrypt("Hello, RSA!")

# 解密数据
decrypted_data = decrypt(encrypted_data)

print("加密后的数据: ", encrypted_data)
print("解密后的数据: ", decrypted_data)

在以上示例代码中,首先通过generate_keys函数生成了RSA公私钥对,并将其保存到了public_key.pemprivate_key.pem文件中。

然后,通过encrypt函数实现了数据加密的过程。首先从public_key.pem文件中读取公钥,然后使用该公钥对输入数据进行加密,并返回加密后的数据。

最后,通过decrypt函数实现了数据解密的过程。首先从private_key.pem文件中读取私钥,然后使用该私钥对加密后的数据进行解密,并返回解密后的数据。

最后,在使用例子中,我们调用了generate_keys函数生成RSA公私钥对,然后调用了encrypt函数对数据进行加密,最后调用decrypt函数对加密后的数据进行解密,并打印出结果。

通过以上示例代码,我们可以实现RSA算法的数据加解密操作,保护敏感数据的安全性。