当前位置: 首页 > news >正文

文件的加密与解密学习笔记

一些可能想知道的:

  • cryptography库:密码学工具包

  • Fernet 是crytography 里的一个模块,用于对称加密

  • with open() as file #为了保证无论是否出错都能正确地关闭文件,与try...finally...相同

  • open() #用于读文件(默认情况下只读 “r”)

  • Python 的 f-string(格式化字符串字面量)将变量动态插入到字符串中。

  • 通过 if __name__ == "__main__" 的条件判断,可以确保 main 函数仅在文件被直接运行时执行,而不会在导入时触发。

典:文件加密与解密

#加入模块:Fernet 对称加密
from cryptography.fernet import Fernet#加密操作
def encrypt_file(file_path,key):with open(file_path,'rb') as file :#明文读取plaintext = file.read()#密钥及密文生成cipher_suite = Fernet(key)ciphertext = cipher_suite.encrypt(plaintext)#生成加密后的输出路径和文件output_file = f"{file_path}.encrypted"with open(output_file,'wb')as file:file.write(ciphertext)# 将生成的密钥生成文件为了后续解密key_file = f"{file_path}.key"with open(key_file, 'wb') as file:file.write(key)print(f"加密完成,加密后的文章保存为:{output_file}")print(f"密钥已经保存到:{key_file}")
#解密操作
def decrypt_file(file_path,key):with open(file_path,'rb') as file:ciphertext = file.read()cipher_suite = Fernet(key)plaintext = cipher_suite.decrypt(ciphertext)output_file = f"{file_path}.decrypted"with open(output_file,'wb') as file:file.write(plaintext)print(f"解密完成,解密后的文件保存为:{output_file}")def main():print("欢迎使用文件加密和解密程序!")print("1.加密文件")print("2.解密文件")choice = input("请选择操作(1/2):")if choice == '1':file_path = input("请输入要加密的文件路径:")key = Fernet.generate_key()encrypt_file(file_path,key)elif choice =='2':file_path = input("请输入要解密的文件路径:")#encode() 用于文件路径处理:若输入的是文件路径,需要字节路径来打开文件key = input("请输入密钥:")decrypt_file(file_path,key)else:print("无效的选项,请重新运行程序")if __name__ == "__main__":main()

相关文章:

  • MIR-2025 | 多模态知识助力机器人导航:从复杂环境到高效路径规划
  • 2025年4月16日华为笔试第三题300分
  • 数据结构与算法-顺序表专题
  • 【裁员感想】
  • 禁用USB接口的电脑管理软件推荐
  • 移植firefly core-1126-jd4官方sdk源码到其他rv1126板卡时 kernel启动中失去响应问题解决
  • 2025年特种设备安全管理 A 证考试全解析
  • 力扣 797. 所有可能的路径
  • 2025宽带避坑指南:百兆、千兆、万兆到底怎么选
  • 对话框类别组件编写
  • 【开源项目】Excel手撕AI算法深入理解(四):注意力机制(Self-Attention、Multi-head Attention)
  • HashMap中put方法的执行流程
  • IOS微信小程序无法显示背景图片
  • 音频识别优化(FFT)
  • 认识Vue
  • Java锁的分类与解析
  • QT6 源(34):随机数生成器类 QRandomGenerator 的源码阅读
  • 科学护理进行性核上性麻痹,缓解病痛提升生活质量
  • 用cython将python程序打包成C++动态库(windows+Vistual Studio2017平台)
  • Lombok @Builder 注解的进阶玩法:自定义 Getter/Setter 方法全攻略
  • 葡萄牙、西班牙突发大范围停电,交通和通信服务受到严重影响
  • 今年我国电影票房破250亿领跑全球,“电影+”带动文旅消费热潮
  • 中国黄金协会:一季度我国黄金产量同比增1.49%,黄金消费量同比降5.96%
  • 从 “沪惠保” 到 “沪骑保”看普惠保险的 “上海样式”
  • 印方称与巴基斯坦军队在克什米尔交火
  • 俄罗斯称已收复库尔斯克州