目录

一、基础知识

二、加解密算法

1.导入运行库

2.定义生成密钥函数

3.定义加解密单元

4.加密文件

5.解密文件

三、测试


一、基础知识

python中的异或操作符为 ^ ,也记作XOR,按位异或的结果是:值相同时异或为0,值不同时异或为1,一共有四种情况:0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0,使用异或可以对文件进行简单的加解密操作。

加密操作:首先将文件转换为二进制数,再随机生成一个与该二进制等长的密钥,将文件的二进制数与密钥进行异或操作,就能得到加密后的二进制数,存储为加密文件。

解密操作:将加密后的二进制文件与密钥再进行异或操作,就能得到原二进制数,再将原二进制数恢复成文件。

二、加解密算法

1.导入运行库

import json
from pathlib import Path
from secrets import token_bytes
import argparse

2.定义生成密钥函数

def random_key(length):key = token_bytes(nbytes=length)            #根据指定长度生成随机密钥key_int = int.from_bytes(key, 'big')        #将byte转换为intreturn key_int

3.定义加解密单元

def encrypt(raw):                                    #加密单元raw_bytes = raw.encode()                         #将字符串编码成字节串raw_int = int.from_bytes(raw_bytes, 'big')       #将byte转换成intkey_int = random_key(len(raw_bytes))             #根据长度生成密钥return raw_int ^ key_int, key_int         #将密钥与文件异或,返回异或后的结果和密钥def decrypt(encrypted, key_int):                             #解密单元decrypted = encrypted ^ key_int                          #将加密后的文件与密钥异或length = (decrypted.bit_length() + 7) // 8               #计算所占比特大小decrypted_bytes = int.to_bytes(decrypted, length, 'big') #将int转换回bytereturn decrypted_bytes.decode()                          #解码后返回

4.加密文件

def encrypt_file(path, key_path=None, *, encoding='utf-8'):    #参数path指定文件地址path = Path(path)cwd = path.cwd() / path.name.split('.')[0]path_encrypted = cwd / path.nameif key_path is None:key_path = cwd / 'key'if not cwd.exists():cwd.mkdir()path_encrypted.touch()key_path.touch()//打开文件并将内容写入with path.open('rt', encoding=encoding) as f1, \path_encrypted.open('wt', encoding=encoding) as f2, \key_path.open('wt', encoding=encoding) as f3:encrypted, key = encrypt(f1.read())json.dump(encrypted, f2)json.dump(key, f3)

5.解密文件

def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):path_encrypted = Path(path_encrypted)cwd = path_encrypted.cwd()path_decrypted = cwd / 'decrypted'if not path_decrypted.exists():path_decrypted.mkdir()path_decrypted /= path_encrypted.namepath_decrypted.touch()if key_path is None:key_path = cwd / 'key'with path_encrypted.open('rt', encoding=encoding) as f1, \key_path.open('rt', encoding=encoding) as f2, \path_decrypted.open('wt', encoding=encoding) as f3:decrypted = decrypt(json.load(f1), json.load(f2))f3.write(decrypted)

三、测试

将要加密的文件放到py文件同级目录下,运行以下将1.txt加密。

encrypt_file("D:/PyCharm Community Edition 2021.3.2/Workplace/encryption/1.txt")

将要解密的文件和密钥放到py文件同级目录下,运行以下将1.txt解密还原。

decrypt_file("D:/PyCharm Community Edition 2021.3.2/Workplace/encryption/1.txt")

Python实现文件简单加解密相关推荐

  1. android 文本 加密解密,Android文件简单加解密

    前言 在Android应用开发中,有时需要把一些内容以文件的方式保存到sdcard上,这时我们需要考虑数据的安全性,这就涉及到文件的加解密,这里简单介绍一种文件的加解密实现方法. 实现方案 我们在读写 ...

  2. RC4加密解密算法原理及实现对文件的加解密

    本文简单实现了RC4算法对于文件的加解密,并已经验证成功.同时实现了对RC4算法加解密较大文件的测速 RC4加密解密算法的原理: 首先,通过我的理解,RC4算法所依赖的最根本原理是:对明文使用同一个密 ...

  3. 【综合】简单加解密——寻找序列号

    [综合]简单加解密--寻找序列号 下面文字对你可能有用(复制+粘贴): #include <stdlib.h> #include <string.h> #include &qu ...

  4. 使用 Cipher CipherInputStream CipherOutputStream 实现对文件的加解密

    最近使用ftp对文件进行传输,而又担心文件安全问题,所以就此写了一个对文件加解密的工具,文件加密类型支持这三种DESede,Blowfish,AES 下面就不多说了,直接上code package c ...

  5. Python 实现凯撒加解密

    凯撒加密法指的是两千年前由凯撒大帝使用的加密法,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.历史上,通 ...

  6. Python中的AES加解密算法

    AES加密的参数及其条件:这个AES加密的主要坑就在于这些条件,首先AES加密有几个参数 秘钥:加密的时候用秘钥,解密的时候需要同样的秘钥才能解出来 明文:需要加密的内容 模式:aes 加密常用的有E ...

  7. C/C++ 实现文件透明加解密

    今日遇见一个开超市的朋友,真没想到在高校开超市一个月可以达到月净利润50K,相比起我们程序员的工资,真是不可同日而语,这个世道啊,真是做程序员不如经商开超市, 我们高科技的从业者,真是造原子弹不如卖茶 ...

  8. 对PHP文件进行加解密:ZendGuard加密与ZendLoader解密

    Zend Guard是目前市面上最成熟的PHP源码加密产品. 加密环境:phpstudy 2016,其中php版本是5.4.45nts. 附件下载: phpstudy 2016 链接:https:// ...

  9. WPS文件批量加解密

    主要应用python3+tkinter 功能:批量加密和解密主流的表格及文档文件(如et.xls.xlsx.wps.doc.docx等). 接口库:win32com #程序运行前,请提前关闭WPS文件 ...

最新文章

  1. openFileDialog 打开TXT记事本文件写入数据库
  2. PAT甲级1064 Complete Binary Search Tree (30分):[C++题解]完全二叉搜索树BST
  3. 适合打游戏的计算机内存品牌型号,玩游戏电脑内存要多大合适?不同内存容量玩游戏区别实测...
  4. Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现
  5. ubuntu下Rhythmbox音乐播放器乱码的解决方案
  6. 事务隔离级别和传播行为_.spring的事务有几种方式?spring事务的隔离级别和传播行为是什么?...
  7. 用for循环打印出九九乘法表
  8. python进阶07并发之三其他问题
  9. java 代码解析工具_改善 Java 代码质量的工具与方法
  10. 处置Linux下Oracle Tomcat 8080端口辩说
  11. C++--第27课 - 动态类型识别
  12. Java设计模式——代理模式实现及原理
  13. 学java用什么编译器_学习Java用什么编译软件好
  14. jeb安装教程_《教我兄弟学Android逆向番外02 jeb工具的使用》
  15. 保险中介3.0时代:数字化中介在场景中打造核心竞争力
  16. Unity RPG 黑暗之光 问题记录 上 (1-63 地形场景 角色选择 行走 相机跟随、旋转、缩放 任务系统 面板栏 背包系统 状态系统)
  17. python模拟实现打印输出进销管理系统中的每月销售明细
  18. HTML5+CSS大作业——汽车自驾游(10页) 主题HTM5网页设计作业成品
  19. 老司机 iOS 周报 #48 | 2018-12-17
  20. CPU运行功耗和什么相关?消耗的电能都去哪了?

热门文章

  1. php5apache2.dll,php5apache2_4.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  2. win10下如何配置JAVA环境
  3. 智能内容安全平台的运营维护与分享
  4. MVC4中ajax分页技术实例
  5. tcp_diag 内核相关实现 以及调用层次
  6. Python编程基础与应用(陈波著)微实践
  7. Python爬虫——去哪儿网评论
  8. java 取年份后两位_java获取年份的后两位
  9. Opencv实现停车位识别
  10. ScrollView中嵌套GridView,不在顶部解决办法