在工作中偶然的机会需要我使用python实现word的解密,已知密码需要解密或者进行爆破行为,但是苦苦没有找到合适的方法,但是偶然间fa

msoffcrypto-tool

msoffcrypto-tool(以前称为ms-offcrypto-tool)是Python工具和库,用于使用密码,中间密钥或生成其托管密钥的私钥解密加密的MS Office文件。

安装: pip install msoffcrypto-tool

使用方式: msoffcrypto-tool encrypted.docx decrypted.docx -p 你的密码

测试是否有加密: msoffcrypto-tool document.doc --test -v

代码用法

1
2
3
4
5
6
7
8
9
10
11
import msoffcrypto

encrypted = open("encrypted.docx", "rb")
file = msoffcrypto.OfficeFile(encrypted)

file.load_key(password="Passw0rd") # Use password

with open("decrypted.docx", "wb") as f:
file.decrypt(f)

encrypted.close()

结合pandas

1
2
3
4
5
6
7
8
9
10
11
12
13
import msoffcrypto
import io
import pandas as pd

decrypted = io.BytesIO()

with open("encrypted.xlsx", "rb") as f:
file = msoffcrypto.OfficeFile(f)
file.load_key(password="Passw0rd") # Use password
file.decrypt(decrypted)

df = pd.read_excel(decrypted)
print(df)

高级用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Verify password before decryption (default: False)
# The ECMA-376 Agile/Standard crypto system allows one to know whether the supplied password is correct before actually decrypting the file
# Currently, the verify_password option is only meaningful for ECMA-376 Agile/Standard Encryption
file.load_key(password="Passw0rd", verify_password=True)

# Use private key
file.load_key(private_key=open("priv.pem", "rb"))

# Use intermediate key (secretKey)
file.load_key(secret_key=binascii.unhexlify("AE8C36E68B4BB9EA46E5544A5FDB6693875B2FDE1507CBC65C8BCF99E25C2562"))

# Check the HMAC of the data payload before decryption (default: False)
# Currently, the verify_integrity option is only meaningful for ECMA-376 Agile Encryption
file.decrypt(open("decrypted.docx", "wb"), verify_integrity=True)