• 欢迎访问金笔头博客,这是一个菜鸟(伪)程序员的自留地,欢迎访问我的github:点击进入

Python3.6解密/破解excel

python eason 1753次浏览 0个评论 扫描二维码

背景

最近刚做完一个python数据处理的项目,趁还热乎赶紧总结下,记下一些以后可能还会用到的东西,方便日后查阅。先介绍下项目背景吧,国内某银行将本行那些信用卡逾期用户债款催收的业务外包给了第三方公司,简称催债公司,为了降低信用卡用户恶意欠款的风险,该行技术部门计划建立催记模型来分析催债数据以及进一步文本挖掘,为以后新用户开户提供决策,银行需要将这些催债公司的催债数据进行整合统一入库,然而这些催债公司上传的数据格式杂乱无章,到底有多乱呢,xls,xlsx,csv,txt,doc,docx,pdf,xml,html,7z,zip,rar都有,而且压缩包有不少是分卷压缩且部分有密码,Excel文件和Word文档也部分加密,关键是密码还只能提供几个可能的密码,因为行方自己也不知道哪些能解开,最蛋疼是这些数据将近50个G,一百多万个文件行方要求要两周内完成!博主第一天入场了解到这些信息之后内心是奔溃的,用句流行话讲就是“心里有句MMP,不知当讲不当讲” -。-!

代码

这里使用pywin32来解密,关于这个库安装的时候可能会遇到一些问题,具体参考:pywin32 ImportError: DLL load failed

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
__author__ = "eason"
from win32com.client import Dispatch
import os


def excel_decrypt(src_file: str, password: str, del_src: bool = False)->bool:
    """
    Excel自动解密
    :param src_file:待解密Excel文件路径
    :param password:密码,多个密码用英文逗号隔开
    :param del_src:是否删除原始加密文件
    :return:
    """
    flag = False
    if "," in password:
        passwords = password.split(",")
        for pwd in passwords:
            try:
                xlapp = Dispatch("Excel.Application")
                wb = xlapp.Workbooks.Open(src_file, False, True, None, pwd)
                file_name = src_file.split("\\")[-1]
                file_location = src_file[0:(len(src_file) - len(file_name))]
                save_path = os.path.join(file_location, ("(decrypted)" + file_name))
                xlapp.DisplayAlerts = False
                xlapp.ActiveWorkbook.SaveAs(save_path, None, "", "")
                wb.Close()
                xlapp.Quit()
                flag = True
                print("decrypt success![%s]" % pwd)
                if del_src:
                    try:
                        os.remove(src_file)
                        print("origin file delete success![%s]" % src_file)
                    except Exception as e:
                        print("origin file delete failed![%s]" % src_file, repr(e))
                break
            except Exception as e:
                print("wrong password![%s]" % pwd, repr(e))
    else:
        try:
            xlapp = Dispatch("Excel.Application")
            wb = xlapp.Workbooks.Open(src_file, False, True, None, password)
            file_name = src_file.split("\\")[-1]
            file_location = src_file[0:(len(src_file) - len(file_name))]
            save_path = os.path.join(file_location, ("(decrypted)" + file_name))
            xlapp.DisplayAlerts = False
            xlapp.ActiveWorkbook.SaveAs(save_path, None, "", "")
            wb.Close()
            xlapp.Quit()
            flag = True
            print("decrypt success![%s]" % password)
            if del_src:
                try:
                    os.remove(src_file)
                    print("origin file delete success![%s]" % src_file)
                except Exception as e:
                    print("origin file delete failed![%s]" % src_file, repr(e))
        except Exception as e:
            print("wrong password![%s]" % password, repr(e))
    return flag


if __name__ == "__main__":
    print(excel_decrypt(r"C:\Users\eason\Desktop\test\decrypt\t1.xls", password="111111,123456,121212", del_src=True))
    print(excel_decrypt(r"C:\Users\eason\Desktop\test\decrypt\t2.xlsx", password="111111,123456,121212", del_src=True))

这段代码稍作修改从字典文件里读取密码可以做一个暴力破解器,有兴趣的童鞋可以尝试下哦^_^
P.S. 更多代码请移步这里:https://github.com/leeyis/python-snippets,有github账号的童鞋不妨给个Star啦,又不会怀孕…


金笔头博客, 版权所有丨如未注明 , 均为原创, 转载请注明Python3.6解密/破解excel
喜欢 (3)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址