'''
依赖库:
pip install pycryptodome #linux 下安装
pip install pycryptodomex #windows 下安装
'''
import sys
import os
from Cryptodome.Cipher import AES
from binascii import b2a_hex, a2b_hex
class Prpcrypt():
def __init__(self, key):
self.key = self.pad(key)
self.mode = AES.MODE_CBC
def pad(self, text, length=16):
if type(text) is str:
text = bytes(text, encoding='utf-8')
text += b' ' * (length - (len(text) % length))
return text
def encrypt(self, text):
cryptor = AES.new(self.key, self.mode, self.key)
text = self.pad(text)
self.ciphertext = cryptor.encrypt(text)
return b2a_hex(self.ciphertext)
def decrypt(self, text):
cryptor = AES.new(self.key, self.mode, self.key)
plain_text = cryptor.decrypt(a2b_hex(text))
return str(plain_text, encoding="utf-8")
def encrypt_file(file_name, key):
print("encrypt file {}".format(file_name))
with open(file_name, 'r') as fp:
plain_text = fp.read()
obj = Prpcrypt(key)
cipher_text = obj.encrypt(plain_text)
new_file_name = "{}.crypt".format(file_name)
with open(new_file_name, 'bw') as fp:
fp.write(cipher_text)
print("save cipher text to file {}".format(new_file_name))
def decrypt_file(file_name, key):
print("decrypt file {}".format(file_name))
with open(file_name, 'rb') as fp:
cipher_text = fp.read()
obj = Prpcrypt(key)
plain_text = obj.decrypt(cipher_text)
new_file_name = "tmp.txt"
with open(new_file_name, 'w') as fp:
fp.write(plain_text)
print("save plain text to file {}".format(new_file_name))
def main():
file_name = os.path.join(os.getcwd(), sys.argv[2])
if sys.argv[1].upper() == "ENCRYPT":
encrypt_file(file_name, sys.argv[3])
elif sys.argv[1].upper() == "DECRYPT":
decrypt_file(file_name, sys.argv[3])
def print_help():
print("python encrypt.py <Action> <File> <Key>")
print(" Action: encrypt or decrypt")
print(" File: file name with path")
print(" Key: personal key")
if __name__ == '__main__':
if len(sys.argv) !=4:
print(len(sys.argv))
print_help()
else:
main()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗