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

使用Python实现RSA加密与解密过程

发布时间:2023-12-27 15:54:15

RSA加密算法是一种非对称加密算法,广泛应用于数据加密和数字签名领域。它由三个步骤组成:密钥生成、加密和解密。

首先,我们需要生成一对RSA密钥,分别是公钥和私钥。公钥可以公开,用于加密数据,而私钥则用于解密数据。

使用Python可以很方便地实现RSA加密和解密。首先,我们需要安装rsa库,该库提供了一些RSA算法相关的函数和类。可以使用以下命令安装:

pip install rsa

接下来,我们可以通过以下代码生成RSA密钥对:

import rsa

# 生成RSA密钥对
(public_key, private_key) = rsa.newkeys(1024)

# 将公钥和私钥保存到文件中
with open('public.pem', 'w') as f:
    f.write(public_key.save_pkcs1().decode())

with open('private.pem', 'w') as f:
    f.write(private_key.save_pkcs1().decode())

上述代码中,我们使用了rsa.newkeys()函数生成了一对1024位的RSA密钥对,并将公钥和私钥保存到了public.pemprivate.pem文件中。

接下来,我们可以使用公钥对数据进行加密:

import rsa

# 读取公钥文件
with open('public.pem', 'r') as f:
    public_key_data = f.read()

# 加载公钥
public_key = rsa.PublicKey.load_pkcs1(public_key_data.encode())

# 加密数据
message = b'Hello, RSA!'
encrypted_message = rsa.encrypt(message, public_key)

# 打印加密后的数据
print(encrypted_message)

上述代码中,我们首先读取了公钥文件public.pem中的内容,并使用rsa.PublicKey.load_pkcs1()函数加载了公钥。然后,我们使用rsa.encrypt()函数对数据进行加密,并打印加密后的结果。

最后,我们可以使用私钥对数据进行解密:

import rsa

# 读取私钥文件
with open('private.pem', 'r') as f:
    private_key_data = f.read()

# 加载私钥
private_key = rsa.PrivateKey.load_pkcs1(private_key_data.encode())

# 解密数据
decrypted_message = rsa.decrypt(encrypted_message, private_key)

# 打印解密后的数据
print(decrypted_message)

上述代码中,我们首先读取了私钥文件private.pem中的内容,并使用rsa.PrivateKey.load_pkcs1()函数加载了私钥。然后,我们使用rsa.decrypt()函数对加密后的数据进行解密,并打印解密后的结果。

使用RSA加密和解密过程的一个示例场景是加密和解密文件。例如,我们可以使用公钥对文件进行加密,然后使用私钥对加密后的文件进行解密。以下是一个使用RSA加密和解密文件的示例代码:

import rsa

def encrypt_file(file_path, public_key_path, encrypted_file_path):
    # 读取文件内容
    with open(file_path, 'rb') as f:
        file_data = f.read()

    # 读取公钥文件内容
    with open(public_key_path, 'r') as f:
        public_key_data = f.read()

    # 加载公钥
    public_key = rsa.PublicKey.load_pkcs1(public_key_data.encode())

    # 加密文件数据
    encrypted_data = rsa.encrypt(file_data, public_key)

    # 将加密后的数据写入文件
    with open(encrypted_file_path, 'wb') as f:
        f.write(encrypted_data)

def decrypt_file(encrypted_file_path, private_key_path, decrypted_file_path):
    # 读取加密后的文件内容
    with open(encrypted_file_path, 'rb') as f:
        encrypted_data = f.read()

    # 读取私钥文件内容
    with open(private_key_path, 'r') as f:
        private_key_data = f.read()

    # 加载私钥
    private_key = rsa.PrivateKey.load_pkcs1(private_key_data.encode())

    # 解密文件数据
    decrypted_data = rsa.decrypt(encrypted_data, private_key)

    # 将解密后的数据写入文件
    with open(decrypted_file_path, 'wb') as f:
        f.write(decrypted_data)

以上代码定义了两个函数encrypt_file()decrypt_file(),分别用于加密和解密文件。

使用时,可以像下面这样调用函数:

encrypt_file('input.txt', 'public.pem', 'encrypted.txt')
decrypt_file('encrypted.txt', 'private.pem', 'decrypted.txt')

上述代码中,input.txt是待加密的文件,public.pem是公钥文件,encrypted.txt是加密后的文件,private.pem是私钥文件,decrypted.txt是解密后的文件。

这样,我们就完成了RSA加密和解密过程的实现。通过实例化公钥和私钥,并使用相应的函数对数据进行加密和解密,可以实现非对称加密的功能。RSA算法的安全性取决于密钥的长度,通常要求使用较长的密钥长度以提供足够的安全性。