Python实现RSA非对称加密算法对桌面txt文档加密解密,附关键逻辑要点
下面是使用Python实现使用RSA非对称加密算法对桌面上的txt文档进行加密和解密的代码: ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP import os # 生成RSA密钥对 def generate_rsa_keys(): key = RSA.generate(2048) private_key = key.export_key() public_key = key.publickey().export_key() # 将私钥保存到文件 with open('private.pem', 'wb') as f: f.write(private_key) # 将公钥保存到文件 with open('public.pem', 'wb') as f: f.write(public_key) return private_key, public_key # 加密文件 def encrypt_file(file_path, public_key_path): # 读取公钥 with open(public_key_path, 'rb') as f: public_key = RSA.import_key(f.read()) cipher = PKCS1_OAEP.new(public_key) # 读取文件内容 with open(file_path, 'rb') as f: data = f.read() # 由于RSA加密有长度限制,这里分块加密 chunk_size = 200 encrypted_chunks = [] for i in range(0, len(data), chunk_size): chunk = data[i:i+chunk_size] encrypted_chunk = cipher.encrypt(chunk) encrypted_chunks.append(encrypted_chunk) encrypted_data = b''.join(encrypted_chunks) # 将加密后的数据保存到新文件 encrypted_file_path = file_path + '.encrypted' with open(encrypted_file_path, 'wb') as f: f.write(encrypted_data) return encrypted_file_path # 解密文件 def decrypt_file(encrypted_file_path, private_key_path): # 读取私钥 with open(private_key_path, 'rb') as f: private_key = RSA.import_key(f.read()) cipher = PKCS1_OAEP.new(private_key) # 读取加密文件内容 with open(encrypted_file_path, 'rb') as f: encrypted_data = f.read() # 分块解密 chunk_size = 256 decrypted_chunks = [] for i in range(0, len(encrypted_data), chunk_size): chunk = encrypted_data[i:i+chunk_size] decrypted_chunk = cipher.decrypt(chunk) decrypted_chunks.append(decrypted_chunk) decrypted_data = b''.join(decrypted_chunks) # 去掉文件名中的.encrypted后缀 original_file_path = encrypted_file_path.replace('.encrypted', '') # 将解密后的数据保存到原文件 with open(original_file_path, 'wb') as f: f.write(decrypted_data) return original_file_path # 主函数 if __name__ == "__main__": # 获取桌面路径 desktop_path = os.path.join(os.path.expanduser("~"), "Desktop") file_path = os.path.join(desktop_path, "example.txt") # 生成密钥对 generate_rsa_keys() public_key_path = 'public.pem' private_key_path = 'private.pem' # 加密文件 encrypted_file_path = encrypt_file(file_path, public_key_path) print(f"文件已加密,加密后的文件路径: {encrypted_file_path}") # 解密文件 decrypted_file_path = decrypt_file(encrypted_file_path, private_key_path) print(f"文件已解密,解密后的文件路径: {decrypted_file_path}") ``` 额外注意的逻辑点 1. RSA加密有长度限制,加密时需要分块处理,分块大小要根据密钥长度合理设置。 2. 私钥的安全性非常重要,要妥善保管,避免泄露,否则加密的数据可能会被他人解密。 3. 加密和解密使用的密钥必须是一对,即公钥加密的数据只能用对应的私钥解密。 ######[AI写代码神器 | 929点数解答 | 2025-06-30 19:55:05]
- Python 助力 Q 老师整理 .in 和 .out 编程测试文件(字节豆包 | 317点数解答 | 2025-12-20 20:54:22)73
- 测3:以读、二进制方式打开C盘temp文件夹下abc.txt文件的代码选哪个?(GPT | 15点数解答 | 2024-06-06 13:53:37)410
- Python实现AES加密解密:含代码示例与关键注意点(字节豆包 | 836点数解答 | 2025-10-14 16:35:32)76
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)479
- Linux 知识问答:判断文件 test.txt 是否存在的正确命令揭晓!(字节豆包 | 62点数解答 | 2024-11-22 17:14:08)297
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- 解决Java调用Python接口中文乱码问题:设置UTF - 8编码全攻略(讯飞星火 | 160点数解答 | 2024-06-06 17:18:39)430
- Java调用Python接口中文乱码问题:字符编码统一解决方案(讯飞星火 | 344点数解答 | 2024-06-06 17:19:55)542
- 解决Java调用Python接口时中文值乱码问题:设置字符编码为UTF-8(讯飞星火 | 264点数解答 | 2024-06-06 17:27:09)407
- 批处理文件:依据参数表.xlsx精准修改文件.txt中p、t、s值(GPT | 811点数解答 | 2024-12-05 12:58:37)401
- 用批处理和Python实现“参数表.xlsx”与“文件.txt”数据匹配及修改(讯飞星火 | 531点数解答 | 2024-12-05 13:20:42)381
- 批处理文件:依据参数表.xlsx精准修改文件.txt特定参数值(阿里通义 | 495点数解答 | 2024-12-05 13:22:26)358