0%

用Python做文件加密解密

参数解析

argparse — 命令行选项、参数和子命令解析器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import argparse

# 创建一个解析器
parser = argparse.ArgumentParser(description='use for Encrypting/Decrypting.')
# 添加参数
parser.add_argument('-d', action="store_true", help='Decryption command')
parser.add_argument('-e', action="store_true", help='Encryption command')
parser.add_argument('-r', action="store_true", help='Rename command')
parser.add_argument('-p', action="store", required=True, help='file path or folder path')

if __name__ == '__main__':
args = vars(parser.parse_args())
print(args)

指令 -p 为必须,通过 -p 传入文件或文件夹路径参数,指令 -d -e -r 告知脚本要执行什么任务。

Python vars() 函数 返回对象object的属性和属性值的字典对象。

1
2
PS C:\decipherer> python main.py -p .\test1.c
{'d': False, 'e': False, 'r': False, 'p': '.\\test1.c'}

解析路径

Python os.path() 模块 — 主要用于获取文件的属性

1
2
3
4
5
6
main_file_path = os.path.dirname(os.path.realpath(__file__))
file_name = os.path.basename(file_path)
file_content = fp.read()
file_name_md5 = hashlib.md5(file_name.encode(encoding='UTF-8')).hexdigest()
file_relative_path = os.path.realpath(file_path).replace(main_file_path, '') # 相对地址
file_relative_dir = os.path.dirname(file_path).replace(main_file_path, '') # 相对地址不带文件名

Python3 os.walk() 方法 — 用于遍历文件夹

1
2
3
4
def rename_dir(dir_path):
for root, dirs, files in os.walk(dir_path, topdown=False):
for name in files:
rename_file(os.path.join(root, name))

shutil.rmtree() — 删除一个完整的目录树

1
2
if os.path.exists('./output_rename'):
shutil.rmtree('./output_rename') # 删除之前的目录

makedirs() — 递归目录创建函数

1
2
if os.path.exists('./output_rename' + file_relative_dir) == 0:
os.makedirs('./output_rename' + file_relative_dir) # 如果目录不存在 创建新目录

MD5加解密

hashlib — 安全哈希与消息摘要

字符串编解码

方法 描述
string.decode(encoding=’UTF-8’, errors=’strict’) 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 ‘ignore’ 或 者’replace’
string.encode(encoding=’UTF-8’, errors=’strict’) 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’

保存文件名是用encode指定编码格式,再读取时用decode指定格式解码,否则遇到中文字读取会出问题。