贡献者: addis
如果需要一些新手友好的加密方案,见 cryptomater,它会挂载一个虚拟硬盘内,显示解密后的文件系统。而实际上这个硬盘中的数据加密后存在真实的硬盘中,便于网盘同步等。
以下给出一些常用的 python 加密函数,可以加密单个文件,加密字符串,加密一个文件夹中所有文件/文件名。注意该脚本只能在 linux 环境使用(因为需要调用命令行的 openssl
)。在 Windows 中可以通过 WSL 中使用该脚本。事实上也可以用 pyOpenSSL
模块来增加可移植性。
加密算法为 aes-256-cbc
,-nosalt
意味着同样的数据和密码生成的加密文件一摸一样(以支持网盘的 “秒传” 功能)。若去掉该选项可能会让加密变得更安全一些。
openssl
,例如 sudo apt install openssl
。
=== what to run ===
下面输入想要运行的函数,例如想加密一个字符串,用 print(encrypt_str('some string', password))
。注意不要替换 password
,脚本运行后会提示手动输入密码
cd
到脚本所在路径,运行 ./encrypt.py
即可。
decrypt_str('m1slBeA8WhZiP8YBgMtw/9zxV2G', password)
encrypt(要加密的文件, 加密后的文件, password)
decrypt(要加密的文件, 加密后的文件, password)
加密的字符串 = encrypt_str(要加密的字符串, password)
解密的字符串 = decrypt_str(要解密的字符串, password)
encrypt_files_in_folder(要加密的文件夹, 输出前缀, password)
。加密后会生成新的文件夹 输出前缀-要加密的文件夹
,原文件夹不会改变。
decrypt_files_in_folder(要解密的文件夹, 输出前缀, password)
。解密后会生成新的文件夹 输出前缀-要解密的文件夹
,原文件夹不会改变。
encrypt_names_in_folder(要加密的文件夹, password)
。要加密的文件夹
本身的名字不会被加密,而包含的所有文件(夹)名会被加密后重命名,注意文件内容不会改变。加密后的文件(夹)名以 file_extension
字符串结尾,默认是 .eNc
。若加密后的名字超出长度,则会创建文件 要加密的文件夹/enc-long-name-dic.txt
作为对照表(解密时该表会被自动读取)。为了尽可能使加密名称的长度小于系统限制,加密后的文件名采用 base16384_utf8_chinese_sorted.txt
中的 16384 个汉字编码。
decrypt_names_in_folder(要解密的文件夹, password)
。
encrypt_folder(要加密的文件夹, 输出前缀, password)
相当于先调用 encrypt_files_in_folder(要加密的文件夹, 输出前缀, password)
再调用 encrypt_names_in_folder(输出前缀 + 要加密的文件夹, password)
decrypt_folder(要解密的文件夹, 输出前缀, password)
与上一条相反。
file_extension
指定加密名称的拓展名。
dic_file
指定用于指定加密名称超出长度的对照表文件名。
base16384_str
字符串从文件 base16384_utf8_chinese_sorted.txt
中读取 16384 个字符。
base64字符串 = utf8_to_base64(字符串)
用于把字符串转换为 base64 编码。
自定义编码字符串 = base64_to_custom_base(base64字符串, 编码字符串)
使用 编码字符串
(如 base16384_str
)对 base64字符串
进行编码。
base64字符串 = custom_base_to_base64(自定义编码字符串, 编码字符串)
使用 编码字符串
(如 base16384_str
)对 自定义编码字符串
进行解码。