Python实现文件简单加解密
目录
一、基础知识
二、加解密算法
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实现文件简单加解密相关推荐
- android 文本 加密解密,Android文件简单加解密
前言 在Android应用开发中,有时需要把一些内容以文件的方式保存到sdcard上,这时我们需要考虑数据的安全性,这就涉及到文件的加解密,这里简单介绍一种文件的加解密实现方法. 实现方案 我们在读写 ...
- RC4加密解密算法原理及实现对文件的加解密
本文简单实现了RC4算法对于文件的加解密,并已经验证成功.同时实现了对RC4算法加解密较大文件的测速 RC4加密解密算法的原理: 首先,通过我的理解,RC4算法所依赖的最根本原理是:对明文使用同一个密 ...
- 【综合】简单加解密——寻找序列号
[综合]简单加解密--寻找序列号 下面文字对你可能有用(复制+粘贴): #include <stdlib.h> #include <string.h> #include &qu ...
- 使用 Cipher CipherInputStream CipherOutputStream 实现对文件的加解密
最近使用ftp对文件进行传输,而又担心文件安全问题,所以就此写了一个对文件加解密的工具,文件加密类型支持这三种DESede,Blowfish,AES 下面就不多说了,直接上code package c ...
- Python 实现凯撒加解密
凯撒加密法指的是两千年前由凯撒大帝使用的加密法,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.历史上,通 ...
- Python中的AES加解密算法
AES加密的参数及其条件:这个AES加密的主要坑就在于这些条件,首先AES加密有几个参数 秘钥:加密的时候用秘钥,解密的时候需要同样的秘钥才能解出来 明文:需要加密的内容 模式:aes 加密常用的有E ...
- C/C++ 实现文件透明加解密
今日遇见一个开超市的朋友,真没想到在高校开超市一个月可以达到月净利润50K,相比起我们程序员的工资,真是不可同日而语,这个世道啊,真是做程序员不如经商开超市, 我们高科技的从业者,真是造原子弹不如卖茶 ...
- 对PHP文件进行加解密:ZendGuard加密与ZendLoader解密
Zend Guard是目前市面上最成熟的PHP源码加密产品. 加密环境:phpstudy 2016,其中php版本是5.4.45nts. 附件下载: phpstudy 2016 链接:https:// ...
- WPS文件批量加解密
主要应用python3+tkinter 功能:批量加密和解密主流的表格及文档文件(如et.xls.xlsx.wps.doc.docx等). 接口库:win32com #程序运行前,请提前关闭WPS文件 ...
最新文章
- openFileDialog 打开TXT记事本文件写入数据库
- PAT甲级1064 Complete Binary Search Tree (30分):[C++题解]完全二叉搜索树BST
- 适合打游戏的计算机内存品牌型号,玩游戏电脑内存要多大合适?不同内存容量玩游戏区别实测...
- Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现
- ubuntu下Rhythmbox音乐播放器乱码的解决方案
- 事务隔离级别和传播行为_.spring的事务有几种方式?spring事务的隔离级别和传播行为是什么?...
- 用for循环打印出九九乘法表
- python进阶07并发之三其他问题
- java 代码解析工具_改善 Java 代码质量的工具与方法
- 处置Linux下Oracle Tomcat 8080端口辩说
- C++--第27课 - 动态类型识别
- Java设计模式——代理模式实现及原理
- 学java用什么编译器_学习Java用什么编译软件好
- jeb安装教程_《教我兄弟学Android逆向番外02 jeb工具的使用》
- 保险中介3.0时代:数字化中介在场景中打造核心竞争力
- Unity RPG 黑暗之光 问题记录 上 (1-63 地形场景 角色选择 行走 相机跟随、旋转、缩放 任务系统 面板栏 背包系统 状态系统)
- python模拟实现打印输出进销管理系统中的每月销售明细
- HTML5+CSS大作业——汽车自驾游(10页) 主题HTM5网页设计作业成品
- 老司机 iOS 周报 #48 | 2018-12-17
- CPU运行功耗和什么相关?消耗的电能都去哪了?
热门文章
- php5apache2.dll,php5apache2_4.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- win10下如何配置JAVA环境
- 智能内容安全平台的运营维护与分享
- MVC4中ajax分页技术实例
- tcp_diag 内核相关实现 以及调用层次
- Python编程基础与应用(陈波著)微实践
- Python爬虫——去哪儿网评论
- java 取年份后两位_java获取年份的后两位
- Opencv实现停车位识别
- ScrollView中嵌套GridView,不在顶部解决办法