歡迎查看第一版
https://blog.csdn.net/weixin_45631815/article/details/140013476?spm=1001.2014.3001.5502
一功能改進
此版本主要改進功能有以下:
- 直接可以調用函數實現
- 可以嘗試多個密碼
- 沒有加密的文件進行保存,可以按實際業務進行改進.
- 思路來源:java 面向對象設計模式.(解碼失敗后的策略模式1進行嘗試2對異常進行處理)
二具體代碼實現
import msoffcrypto
import os
# 已加密Excel文件路徑
encrypted_file = r"已加密Excel文件路徑"
# 未加密文件將保存的路徑
unencrypted_file = r"未加密文件將保存的路徑"
# Excel文件可能的密碼列表
excel_passwords = ["密碼1", "密碼2"]
def decrypt_excel(encrypted_file, unencrypted_file, excel_passwords):for password in excel_passwords:try:# 打開加密文件with open(encrypted_file, "rb") as encrypted_file_fd:office_file = msoffcrypto.OfficeFile(encrypted_file_fd)# 嘗試使用當前密碼解密office_file.load_key(password=password)# 如果沒有拋出異常,說明密碼正確,進行解密并跳出循環with open(unencrypted_file, "wb") as unencrypted_file_fd:office_file.decrypt(unencrypted_file_fd)print(f"文件已使用密碼'{password}'解密并保存至:{unencrypted_file}")break # 密碼正確,解密完成,結束循環except msoffcrypto.exceptions.InvalidKeyError:continue # 當前密碼錯誤,嘗試下一個密碼# 如果文件[Unencrypted document]沒有加密直接就退出循環except msoffcrypto.exceptions.FileFormatError:# 沒有加密的文件,直接復制操作with open(unencrypted_file, "wb") as unencrypted_file_fd:unencrypted_file_fd.write(open(encrypted_file, "rb").read())breakexcept Exception as e:print(f"解密過程中發生錯誤:{e}")break # 發生其他錯誤,結束循環
directory_path = r"G:\路徑加密"
for root, dirs, files in os.walk(directory_path):for file in files:print(os.path.join(root, file))m=r'{}'.format(os.path.join(root, file))outm=r'{}'.format(os.path.join(root.replace('加密',''),file))decrypt_excel(m,outm,excel_passwords)
三其他改進
歡迎交流不同改進意見