基于Python的文件加密与解密工具的开发
下面是一个基于Python的文件加密与解密工具的示例代码,使用AES算法对文件进行加密和解密:
import os from Crypto.Cipher import AES # 定义加密函数 def encrypt_file(key, filename): # 加密文件的块大小 chunksize = 64*1024 # 生成随机的IV向量 iv = os.urandom(16) # 创建AES加密器 encryptor = AES.new(key, AES.MODE_CBC, iv) # 获取文件大小 filesize = os.path.getsize(filename) # 输出加密文件名和加密前文件大小 encrypted_filename = filename + '.enc' print(f'Encrypting {filename} ({filesize} bytes) to {encrypted_filename}...') # 打开加密后文件并写入IV向量 with open(encrypted_filename, 'wb') as outfile: outfile.write(iv) # 加密文件内容 with open(filename, 'rb') as infile: while True: chunk = infile.read(chunksize) if len(chunk) == 0: break elif len(chunk) % 16 != 0: # 填充数据 chunk += b' ' * (16 - len(chunk) % 16) outfile.write(encryptor.encrypt(chunk)) # 定义解密函数 def decrypt_file(key, filename): # 加密文件的块大小 chunksize = 64*1024 # 打开加密文件并读取IV向量 with open(filename, 'rb') as infile: iv = infile.read(16) # 创建AES解密器 decryptor = AES.new(key, AES.MODE_CBC, iv) # 输出解密文件名 decrypted_filename = os.path.splitext(filename)[0] print(f'Decrypting {filename} to {decrypted_filename}...') # 解密文件内容 with open(decrypted_filename, 'wb') as outfile: while True: chunk = infile.read(chunksize) if len(chunk) == 0: break outfile.write(decryptor.decrypt(chunk)) # 去掉填充数据 outfile.truncate() # 加密或解密文件 def process_file(key, filename, encrypt=True): if encrypt: encrypt_file(key, filename) else: decrypt_file(key, filename) # 密钥,必须为16、24、32字节长 key = b'mysecretpassword12' # 要加密的文件 filename = 'pidancode.com' # 加密文件 process_file(key, filename, encrypt=True) # 解密文件 process_file(key, 'pidancode.com.enc', encrypt=False)
该代码使用process_file函数对文件进行加密或解密,根据传入的encrypt参数进行判断。运行该代码将会在同一目录下生成加密文件pidancode.com.enc和解密文件pidancode.com。需要注意的是,这段代码中使用的密钥为明文,实际使用时应该使用安全的方式保存密钥,例如使用密钥管理系统或硬件安全模块。
相关文章