使用非对称加密算法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. 加密和解密使用的密钥必须是一对,即公钥加密的数据只能用对应的私钥解密。 [2025-06-30 19:55:05 | AI写代码神器 | 929点数解答]
- 以读、二进制方式打开c盘temp文件夹下abc.txt文件的代码是()[测3] a. f=open(c:/temp/abc.txt,'bt') b. f=open('c://temp//abc.txt','rb') c. f=open('c:\temp\abc.txt','rb') d. f=open('c:/temp/abc.txt','wb') e. f=open('c:\\temp\\abc.txt','rb') f. f=open('c:/temp/abc.txt','rb') g. f=open('c://temp//abc.txt':'rb') h. f=open('c:\\temp\\abc.txt','ab')(15点数解答 | 2024-06-06 13:53:37)291
- 下面哪条命令用于判断文件test.txt是否存在? a. [ test.txt -f ] b. if exist test.txt c. [ test.txt -e ] d. [ -f test.txt ](62点数解答 | 2024-11-22 17:14:08)193
- 商品展示模块 前端页面:productlist.jsp、productdetail.jsp 后端逻辑:productservlet 处理获取商品列表与详情请求 实现商品分页显示、按类别或关键词搜索功能 前端页面渲染与交互 使用 jsp、el、jstl 渲染商品数据 使用 css 优化页面样式,确保用户界面美观统一 使用 javascript 实现简单的前端交互,如商品图片切换、下拉菜单 搜索与过滤功能 在 productlist.jsp 实现搜索栏,允许用户输入关键词进行搜索 后端根据搜索条件查询数据库,返回符合条件的商品列表 使用 jstl 循环输出商品数据,并实现价格或类别过滤选项(19点数解答 | 2024-12-13 15:00:43)228
- 帮我写一个批处理文件,内容如下: 1、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中p=的值改为"参数表.xlsx"中c列对应的值; 2、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中t=的值改为"参数表.xlsx"中b列对应的值; 3、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中s=的值改为"参数表.xlsx"中d列对应的值; 如: 参数表.xlsx中a列a1,a2,a3;b列1.5,2,3;c列为10,20,30;d列100,101,102; 文件.txt中的行 1:l p[54:a1] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=10,ed=1]; 2:l p[57:a2] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=11,ed=1]; 3:l p[67:a3] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=12,ed=1]; 文件.txt修改后为 1:l p[54(811点数解答 | 2024-12-05 12:58:37)260
- 帮我写一个批处理文件,内容如下: 1、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中p=的值改为"参数表.xlsx"中c列对应的值; 2、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中t=的值改为"参数表.xlsx"中b列对应的值; 3、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中s=的值改为"参数表.xlsx"中d列对应的值; 参数表.xlsx中a列a1,a2,a3;b列1.5,2,3;c列为10,20,30;d列100,101,102; 文件.txt数据 1:l p[54:a1] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=10,ed=1]; 2:l p[57:a2] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=11,ed=1]; 3:l p[67:a3] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=12,ed=1]; 文件.txt修改后数据 1:l p[54:a1(531点数解答 | 2024-12-05 13:20:42)256
- 帮我写一个批处理文件,内容如下: 1、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中p=的值改为"参数表.xlsx"中c列对应的值; 2、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中t=的值改为"参数表.xlsx"中b列对应的值; 3、如果在"参数表.xlsx"a列中的值找到与"文件.txt"中相同的值,则把此行中s=的值改为"参数表.xlsx"中d列对应的值; 参数表.xlsx中a列a1,a2,a3;b列1.5,2,3;c列为10,20,30;d列100,101,102; 文件.txt数据 1:l p[54:a1] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=10,ed=1]; 2:l p[57:a2] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=11,ed=1]; 3:l p[67:a3] 2000mm/sec cnt100 spot[sd=1,p=25,t=2.0,s=12,ed=1]; 文件.txt修改后数据 1:l p[54:a1(495点数解答 | 2024-12-05 13:22:26)234
- 2-7 集合划分问题。 问题描述:n个元素的集合{1,2,……,n}可以划分为若干非空子集。例如,当n=4时,集合{1,2,3,4}可以划分为15个不同的非空子集如下: {{1},{2},{3}, {4}} {{1,3},{2,4}} {{1,2},{3},{4}} {{1,4},{2,3}} {{1,3},{2},{4}} {{1,2,3},{4}} {{1,4},{2},{3}} {{1,2,4},{3}} {{2,3},{1},{4}} {{1,3,4},{2}} {{2,4},{1},{3}} {{2,3,4},{1}} {{3,4},{1},{2}} {{1,2,3,4}} {{1,2},{3,4}} 算法设计:给定正整数n,计算出n个元素的集合{1,2,…,n}可以划分为多少个不同的非空子集。 数据输入:由文件input. txt提供输入数据。文件的第1行是元素个数n. 结果输出:将计算出的不同的非空子集数输出到文件output. txt. 输入文件示例 输出文件示例 input. txt output. txt 5 52 用c语言写,务必(223点数解答 | 2025-04-02 08:32:25)189
- 1.新增以cht为用户,设计shell脚本程序完成以下功能 1)判断用户输入的用户名是否存在,存在则验证输入的密码是否满足以下条件 2)长度大于8位、包含大小写字母和特殊字符(将实现过程代码截图) 3)写shell脚本 1. 创建一个名为“my_folder”的目录。 b. 在该目录下创建一个名为“my_file.txt”的文件。 c. 向“my_file.txt”文件中写入一些文本,例如:“Hello, world!” d. 列出“my_folder”目录下的所有文件和子目录。 e. 更改“my_file.txt”文件的权限,使其只有所有者可以读取和写入。 2. 保存并退出编辑器。 3. 使脚本可执行,并运行它(记录步骤并截图)(466点数解答 | 2025-06-06 11:02:00)87
- )linux终端 创建新用户user,其中用户名为学生姓名首字小写(如:张三,用户名为zsan),将/etc/passwd拷贝到/home/user下面。修改/home/user/passwd,在文件的第15行下添加“hello学号+姓名”,光标停留在hello学号+姓名上,复制5行,粘贴在文件的最下面,保存,退出编辑。(5分) (2)在用户家目录中添加文件1.txt,输入内容:好好学习。然后使用zip工具将1.txt做成压缩包放在用户家目录下,使用zip的解压工具将1.txt 的压缩包解压到/home/user/test/目录中。(3分) (3)将(2)中的文件1.txt重命名为filename.txt。修改文件filename.txt的权限,使得文件的所有者可以读、写,组成员和其他人只能读取。(3分) (4)使用find命令查找/var/log中所有扩展名为.log的日志文件。使用touch命令创建一个名为new_file.txt的新文件,并设置其修改时间为考试当天。使用echo命令向new_file.txt文件中写入一行文本。并使用cat 命令查看new_file.txt文件的内(592点数解答 | 2025-06-12 21:19:29)84
- 作为**工程师,loadrunner 进行**的标准流程? 📋(215点数解答 | 2023-11-09 18:25:31)254
- 题目:按照以下步骤在 pycharm 中进行自动化测试脚本编写,并执行脚本。 步骤: (1)从 selenium 中引入 webdriver; (2)使用 selenium 模块的 webdriver 打开谷歌浏览器; (3)在谷歌浏览器中通过 get 方法发送网址eshop测试平台登录页面; (4)增加智能时间等待 5 秒; (5)查看登录页面中的用户名输入框元素,通过 css_selector 属性定位用户名输入框,并输入用户名(用自己注册的用户); (6)查看登录页面中的密码输入框元素,通过 xpath 属性定位密码输入框,并输入密码(用自己注册的用户对应密码) ; (7)查看登录页面中的登录按钮元素,通过 class_name 方法定位登录按钮,使用 click()方法点击登录按钮进入eshop测试平台首页; (8)在eshop测试平台首页通过 link_text 方法对“我的订单”按钮进行定位,使用 click()方法点击“我的订单”(304点数解答 | 2024-11-06 15:38:30)312
- 用python完成一个简单的文档内容查询程序,要求能够查出文档中所有需要的内容的索引。 文档: it is not the critic who counts, not the man who points out how the strong man stumbles, the doer of deeds could have done them better. the credit belongs to the man who is actually in the are 'ns, whose face is marred by dust and sweat and blood; who strives valiantly; who errs, and comes short again and again ;because there is not effort without error and shortcoming; but who does actually strive to do the deeds; who knows the great enthusiasms,(1189点数解答 | 2024-10-21 21:45:05)259