3DES(Triple Data Encryption Standard,三重数据加密标准)
3DES 是一种对称加密算法,它通过对数据进行多次 DES 加密操作来增强加密强度。
实现原理:
3DES 通常使用三个不同的密钥对数据进行加密。它的基本操作流程可以是:首先使用第一个密钥进行 DES 加密,然后使用第二个密钥进行 DES 解密,最后再使用第三个密钥进行 DES 加密。这样的组合使得加密强度比单个 DES 加密更高。
用途:
- 数据保密:对敏感信息进行加密,如个人身份信息、财务数据等,以防止未经授权的访问和泄露。
- 通信安全:在网络通信中加密数据,确保信息在传输过程中的机密性和完整性。
- 存储加密:对存储在硬盘、数据库或其他存储介质中的数据进行加密,保护数据的安全性。
然而,由于 3DES 的计算效率相对较低,并且随着计算能力的提高其安全性逐渐受到挑战,在许多新的应用场景中,更先进的加密算法如 AES(Advanced Encryption Standard)通常被优先选用。
Python 3DES 加密代码:
import os
from Crypto.Cipher import DES3
from Crypto.Util.Padding import unpad
from tkinter import filedialog
import tkinter as tk
def decrypt_file(file_path):
# 读取加密文件内容
with open(file_path, 'rb') as file:
encrypted_content = file.read()
# 3DES 解密
key = b'IAMLOLI123123123asdfjklh' # 与加密时使用的相同的 24 字节密钥
cipher = DES3.new(key, DES3.MODE_ECB)
decrypted_content = cipher.decrypt(encrypted_content)
# 去除填充
decrypted_content = unpad(decrypted_content, 8)
# 恢复原文件后缀
original_file_path = file_path[:-6] # 去掉 ".goto4" 后缀
# 覆盖加密文件
with open(original_file_path, 'wb') as file:
file.write(decrypted_content)
# 删除加密文件
os.remove(file_path)
def decrypt_folder(folder_path):
# 遍历文件夹中的所有文件和子文件夹
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
if file_path.endswith('.goto4'): # 只处理加密后的文件
decrypt_file(file_path)
def select_folder():
root = tk.Tk()
root.iconbitmap('mp4/mingchao.png')
root.withdraw() # 隐藏主窗口
folder_path = filedialog.askdirectory()
if folder_path:
decrypt_folder(folder_path)
print("解密完成!")
else:
print("未选择文件夹")
if __name__ == '__main__':
select_folder()
为了方便用tk写了一个选择指定的加密文件夹的功能
演示
原文件
加密后
Python 3DES解密代码:
import os
from Crypto.Cipher import DES3
from Crypto.Util.Padding import unpad
from tkinter import filedialog
import tkinter as tk
def decrypt_file(file_path):
# 读取加密文件内容
with open(file_path, 'rb') as file:
encrypted_content = file.read()
# 3DES 解密
key = b'IAMLOLI123123123asdfjklh' # 与加密时使用的相同的 24 字节密钥
cipher = DES3.new(key, DES3.MODE_ECB)
decrypted_content = cipher.decrypt(encrypted_content)
# 去除填充
decrypted_content = unpad(decrypted_content, 8)
# 恢复原文件后缀
original_file_path = file_path[:-6] # 去掉 ".goto4" 后缀
# 覆盖加密文件
with open(original_file_path, 'wb') as file:
file.write(decrypted_content)
# 删除加密文件
os.remove(file_path)
def decrypt_folder(folder_path):
# 遍历文件夹中的所有文件和子文件夹
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
if file_path.endswith('.goto4'): # 只处理加密后的文件
decrypt_file(file_path)
def select_folder():
root = tk.Tk()
root.iconbitmap('mp4/mingchao.png')
root.withdraw() # 隐藏主窗口
folder_path = filedialog.askdirectory()
if folder_path:
decrypt_folder(folder_path)
print("解密完成!")
else:
print("未选择文件夹")
if __name__ == '__main__':
select_folder()