Name | msoffcrypto-tool JSON |
Version |
5.4.2
JSON |
| download |
home_page | https://github.com/nolze/msoffcrypto-tool |
Summary | Python tool and library for decrypting and encrypting MS Office files using a password or other keys |
upload_time | 2024-08-08 15:50:28 |
maintainer | None |
docs_url | None |
author | nolze |
requires_python | <4.0,>=3.8 |
license | MIT |
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# msoffcrypto-tool
[](https://pypi.org/project/msoffcrypto-tool/)
[](https://pypistats.org/packages/msoffcrypto-tool)
[](https://github.com/nolze/msoffcrypto-tool/actions/workflows/ci.yaml)
[](https://codecov.io/gh/nolze/msoffcrypto-tool)
[](http://msoffcrypto-tool.readthedocs.io/en/latest/?badge=latest)
msoffcrypto-tool is a Python tool and library for decrypting and encrypting MS Office files using a password or other keys.
## Contents
* [Installation](#installation)
* [Examples](#examples)
* [Supported encryption methods](#supported-encryption-methods)
* [Tests](#tests)
* [Todo](#todo)
* [Resources](#resources)
* [Use cases and mentions](#use-cases-and-mentions)
* [Contributors](#contributors)
* [Credits](#credits)
## Installation
```
pip install msoffcrypto-tool
```
## Examples
### As CLI tool (with password)
#### Decryption
Specify the password with `-p` flag:
```
msoffcrypto-tool encrypted.docx decrypted.docx -p Passw0rd
```
Password is prompted if you omit the password argument value:
```bash
$ msoffcrypto-tool encrypted.docx decrypted.docx -p
Password:
```
To check if the file is encrypted or not, use `-t` flag:
```
msoffcrypto-tool document.doc --test -v
```
It returns `1` if the file is encrypted, `0` if not.
#### Encryption (OOXML only, experimental)
> [!IMPORTANT]
> Encryption feature is experimental. Please use it at your own risk.
To password-protect a document, use `-e` flag along with `-p` flag:
```
msoffcrypto-tool -e -p Passw0rd plain.docx encrypted.docx
```
### As library
Password and more key types are supported with library functions.
#### Decryption
Basic usage:
```python
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()
```
In-memory:
```python
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)
```
Advanced usage:
```python
# 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)
```
Supported key types are
- Passwords
- Intermediate keys (optional)
- Private keys used for generating escrow keys (escrow certificates) (optional)
See also ["Backdooring MS Office documents with secret master keys"](https://web.archive.org/web/20171008075059/http://secuinside.com/archive/2015/2015-1-9.pdf) for more information on the key types.
#### Encryption (OOXML only, experimental)
> [!IMPORTANT]
> Encryption feature is experimental. Please use it at your own risk.
Basic usage:
```python
from msoffcrypto.format.ooxml import OOXMLFile
plain = open("plain.docx", "rb")
file = OOXMLFile(plain)
with open("encrypted.docx", "wb") as f:
file.encrypt("Passw0rd", f)
plain.close()
```
In-memory:
```python
from msoffcrypto.format.ooxml import OOXMLFile
import io
encrypted = io.BytesIO()
with open("plain.xlsx", "rb") as f:
file = OOXMLFile(f)
file.encrypt("Passw0rd", encrypted)
# Do stuff with encrypted buffer; it contains an OLE container with an encrypted stream
...
```
## Supported encryption methods
### MS-OFFCRYPTO specs
* [x] ECMA-376 (Agile Encryption/Standard Encryption)
* [x] MS-DOCX (OOXML) (Word 2007-)
* [x] MS-XLSX (OOXML) (Excel 2007-)
* [x] MS-PPTX (OOXML) (PowerPoint 2007-)
* [x] Office Binary Document RC4 CryptoAPI
* [x] MS-DOC (Word 2002, 2003, 2004)
* [x] MS-XLS ([Excel 2002, 2003, 2007, 2010](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-xls/a3ad4e36-ab66-426c-ba91-b84433312068#Appendix_A_22)) (experimental)
* [x] MS-PPT (PowerPoint 2002, 2003, 2004) (partial, experimental)
* [x] Office Binary Document RC4
* [x] MS-DOC (Word 97, 98, 2000)
* [x] MS-XLS (Excel 97, 98, 2000) (experimental)
* [ ] ECMA-376 (Extensible Encryption)
* [x] XOR Obfuscation
* [x] MS-XLS ([Excel 2002, 2003](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-xls/a3ad4e36-ab66-426c-ba91-b84433312068#Appendix_A_21)) (experimental)
* [ ] MS-DOC (Word 2002, 2003, 2004?)
### Other
* [ ] Word 95 Encryption (Word 95 and prior)
* [ ] Excel 95 Encryption (Excel 95 and prior)
* [ ] PowerPoint 95 Encryption (PowerPoint 95 and prior)
PRs are welcome!
## Tests
With [coverage](https://github.com/nedbat/coveragepy) and [pytest](https://pytest.org/):
```
poetry install
poetry run coverage run -m pytest -v
```
## Todo
* [x] Add tests
* [x] Support decryption with passwords
* [x] Support older encryption schemes
* [x] Add function-level tests
* [x] Add API documents
* [x] Publish to PyPI
* [x] Add decryption tests for various file formats
* [x] Integrate with more comprehensive projects handling MS Office files (such as [oletools](https://github.com/decalage2/oletools/)?) if possible
* [x] Add the password prompt mode for CLI
* [x] Improve error types (v4.12.0)
* [ ] Add type hints
* [ ] Introduce something like `ctypes.Structure`
* [x] Support OOXML encryption
* [ ] Support other encryption
* [ ] Isolate parser
* [ ] Redesign APIs (v6.0.0)
## Resources
* "Backdooring MS Office documents with secret master keys" [http://secuinside.com/archive/2015/2015-1-9.pdf](https://web.archive.org/web/20171008075059/http://secuinside.com/archive/2015/2015-1-9.pdf)
* Technical Documents <https://msdn.microsoft.com/en-us/library/cc313105.aspx>
* [MS-OFFCRYPTO] Agile Encryption <https://msdn.microsoft.com/en-us/library/dd949735(v=office.12).aspx>
* [MS-OFFDI] Microsoft Office File Format Documentation Introduction <https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-offdi/24ed256c-eb5b-494e-b4f6-fb696ad2b4dc>
* LibreOffice/core <https://github.com/LibreOffice/core>
* LibreOffice/mso-dumper <https://github.com/LibreOffice/mso-dumper>
* wvDecrypt <http://www.skynet.ie/~caolan/Packages/wvDecrypt.html>
* Microsoft Office password protection - Wikipedia <https://en.wikipedia.org/wiki/Microsoft_Office_password_protection#History_of_Microsoft_Encryption_password>
* office2john.py <https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/run/office2john.py>
## Alternatives
* herumi/msoffice <https://github.com/herumi/msoffice>
* DocRecrypt <https://blogs.technet.microsoft.com/office_resource_kit/2013/01/23/now-you-can-reset-or-remove-a-password-from-a-word-excel-or-powerpoint-filewith-office-2013/>
* Apache POI - the Java API for Microsoft Documents <https://poi.apache.org/>
## Use cases and mentions
### General
* <https://repology.org/project/python:msoffcrypto-tool/versions> (kudos to maintainers!)
<!-- * <https://checkroth.com/unlocking-password-protected-files.html> (outdated) -->
### Corporate
* Workato <https://docs.workato.com/connectors/python.html#supported-features> <!-- https://web.archive.org/web/20240525062245/https://docs.workato.com/connectors/python.html#supported-features -->
* Check Point <https://www.checkpoint.com/about-us/copyright-and-trademarks/> <!-- https://web.archive.org/web/20230326071230/https://www.checkpoint.com/about-us/copyright-and-trademarks/ -->
### Malware/maldoc analysis
* <https://github.com/jbremer/sflock/commit/3f6a96abe1dbb4405e4fb7fd0d16863f634b09fb>
* <https://isc.sans.edu/forums/diary/Video+Analyzing+Encrypted+Malicious+Office+Documents/24572/>
### CTF
* <https://github.com/shombo/cyberstakes-writeps-2018/tree/master/word_up>
* <https://github.com/willi123yao/Cyberthon2020_Writeups/blob/master/csit/Lost_Magic>
### In other languages
* <https://github.com/dtjohnson/xlsx-populate>
* <https://github.com/opendocument-app/OpenDocument.core/blob/233663b039/src/internal/ooxml/ooxml_crypto.h>
* <https://github.com/jaydadhania08/PHPDecryptXLSXWithPassword>
* <https://github.com/epicentre-msf/rpxl>
### In publications
* [Excel、データ整理&分析、画像処理の自動化ワザを完全網羅! 超速Python仕事術大全](https://books.google.co.jp/books?id=TBdVEAAAQBAJ&q=msoffcrypto) (伊沢剛, 2022)
* ["Analyse de documents malveillants en 2021"](https://twitter.com/decalage2/status/1435255507846053889), MISC Hors-série N° 24, "Reverse engineering : apprenez à analyser des binaires" (Lagadec Philippe, 2021)
* [シゴトがはかどる Python自動処理の教科書](https://books.google.co.jp/books?id=XEYUEAAAQBAJ&q=msoffcrypto) (クジラ飛行机, 2020)
## Contributors
* <https://github.com/nolze/msoffcrypto-tool/graphs/contributors>
## Credits
* The sample file for XOR Obfuscation is from: <https://github.com/openwall/john-samples/tree/main/Office/Office_Secrets>
Raw data
{
"_id": null,
"home_page": "https://github.com/nolze/msoffcrypto-tool",
"name": "msoffcrypto-tool",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": null,
"author": "nolze",
"author_email": "nolze@int3.net",
"download_url": "https://files.pythonhosted.org/packages/d2/b7/0fd6573157e0ec60c0c470e732ab3322fba4d2834fd24e1088d670522a01/msoffcrypto_tool-5.4.2.tar.gz",
"platform": null,
"description": "# msoffcrypto-tool\n\n[](https://pypi.org/project/msoffcrypto-tool/)\n[](https://pypistats.org/packages/msoffcrypto-tool)\n[](https://github.com/nolze/msoffcrypto-tool/actions/workflows/ci.yaml)\n[](https://codecov.io/gh/nolze/msoffcrypto-tool)\n[](http://msoffcrypto-tool.readthedocs.io/en/latest/?badge=latest)\n\nmsoffcrypto-tool is a Python tool and library for decrypting and encrypting MS Office files using a password or other keys.\n\n## Contents\n\n* [Installation](#installation)\n* [Examples](#examples)\n* [Supported encryption methods](#supported-encryption-methods)\n* [Tests](#tests)\n* [Todo](#todo)\n* [Resources](#resources)\n* [Use cases and mentions](#use-cases-and-mentions)\n* [Contributors](#contributors)\n* [Credits](#credits)\n\n## Installation\n\n```\npip install msoffcrypto-tool\n```\n\n## Examples\n\n### As CLI tool (with password)\n\n#### Decryption\n\nSpecify the password with `-p` flag:\n\n```\nmsoffcrypto-tool encrypted.docx decrypted.docx -p Passw0rd\n```\n\nPassword is prompted if you omit the password argument value:\n\n```bash\n$ msoffcrypto-tool encrypted.docx decrypted.docx -p\nPassword:\n```\n\nTo check if the file is encrypted or not, use `-t` flag:\n\n```\nmsoffcrypto-tool document.doc --test -v\n```\n\nIt returns `1` if the file is encrypted, `0` if not.\n\n#### Encryption (OOXML only, experimental)\n\n> [!IMPORTANT]\n> Encryption feature is experimental. Please use it at your own risk.\n\nTo password-protect a document, use `-e` flag along with `-p` flag:\n\n```\nmsoffcrypto-tool -e -p Passw0rd plain.docx encrypted.docx\n```\n\n### As library\n\nPassword and more key types are supported with library functions.\n\n#### Decryption\n\nBasic usage:\n\n```python\nimport msoffcrypto\n\nencrypted = open(\"encrypted.docx\", \"rb\")\nfile = msoffcrypto.OfficeFile(encrypted)\n\nfile.load_key(password=\"Passw0rd\") # Use password\n\nwith open(\"decrypted.docx\", \"wb\") as f:\n file.decrypt(f)\n\nencrypted.close()\n```\n\nIn-memory:\n\n```python\nimport msoffcrypto\nimport io\nimport pandas as pd\n\ndecrypted = io.BytesIO()\n\nwith open(\"encrypted.xlsx\", \"rb\") as f:\n file = msoffcrypto.OfficeFile(f)\n file.load_key(password=\"Passw0rd\") # Use password\n file.decrypt(decrypted)\n\ndf = pd.read_excel(decrypted)\nprint(df)\n```\n\nAdvanced usage:\n\n```python\n# Verify password before decryption (default: False)\n# The ECMA-376 Agile/Standard crypto system allows one to know whether the supplied password is correct before actually decrypting the file\n# Currently, the verify_password option is only meaningful for ECMA-376 Agile/Standard Encryption\nfile.load_key(password=\"Passw0rd\", verify_password=True)\n\n# Use private key\nfile.load_key(private_key=open(\"priv.pem\", \"rb\"))\n\n# Use intermediate key (secretKey)\nfile.load_key(secret_key=binascii.unhexlify(\"AE8C36E68B4BB9EA46E5544A5FDB6693875B2FDE1507CBC65C8BCF99E25C2562\"))\n\n# Check the HMAC of the data payload before decryption (default: False)\n# Currently, the verify_integrity option is only meaningful for ECMA-376 Agile Encryption\nfile.decrypt(open(\"decrypted.docx\", \"wb\"), verify_integrity=True)\n```\n\nSupported key types are\n\n- Passwords\n- Intermediate keys (optional)\n- Private keys used for generating escrow keys (escrow certificates) (optional)\n\nSee also [\"Backdooring MS Office documents with secret master keys\"](https://web.archive.org/web/20171008075059/http://secuinside.com/archive/2015/2015-1-9.pdf) for more information on the key types.\n\n#### Encryption (OOXML only, experimental)\n\n> [!IMPORTANT]\n> Encryption feature is experimental. Please use it at your own risk.\n\nBasic usage:\n\n```python\nfrom msoffcrypto.format.ooxml import OOXMLFile\n\nplain = open(\"plain.docx\", \"rb\")\nfile = OOXMLFile(plain)\n\nwith open(\"encrypted.docx\", \"wb\") as f:\n file.encrypt(\"Passw0rd\", f)\n\nplain.close()\n```\n\nIn-memory:\n\n```python\nfrom msoffcrypto.format.ooxml import OOXMLFile\nimport io\n\nencrypted = io.BytesIO()\n\nwith open(\"plain.xlsx\", \"rb\") as f:\n file = OOXMLFile(f)\n file.encrypt(\"Passw0rd\", encrypted)\n\n# Do stuff with encrypted buffer; it contains an OLE container with an encrypted stream\n...\n```\n\n## Supported encryption methods\n\n### MS-OFFCRYPTO specs\n\n* [x] ECMA-376 (Agile Encryption/Standard Encryption)\n * [x] MS-DOCX (OOXML) (Word 2007-)\n * [x] MS-XLSX (OOXML) (Excel 2007-)\n * [x] MS-PPTX (OOXML) (PowerPoint 2007-)\n* [x] Office Binary Document RC4 CryptoAPI\n * [x] MS-DOC (Word 2002, 2003, 2004)\n * [x] MS-XLS ([Excel 2002, 2003, 2007, 2010](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-xls/a3ad4e36-ab66-426c-ba91-b84433312068#Appendix_A_22)) (experimental)\n * [x] MS-PPT (PowerPoint 2002, 2003, 2004) (partial, experimental)\n* [x] Office Binary Document RC4\n * [x] MS-DOC (Word 97, 98, 2000)\n * [x] MS-XLS (Excel 97, 98, 2000) (experimental)\n* [ ] ECMA-376 (Extensible Encryption)\n* [x] XOR Obfuscation\n * [x] MS-XLS ([Excel 2002, 2003](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-xls/a3ad4e36-ab66-426c-ba91-b84433312068#Appendix_A_21)) (experimental)\n * [ ] MS-DOC (Word 2002, 2003, 2004?)\n\n### Other\n\n* [ ] Word 95 Encryption (Word 95 and prior)\n* [ ] Excel 95 Encryption (Excel 95 and prior)\n* [ ] PowerPoint 95 Encryption (PowerPoint 95 and prior)\n\nPRs are welcome!\n\n## Tests\n\nWith [coverage](https://github.com/nedbat/coveragepy) and [pytest](https://pytest.org/):\n\n```\npoetry install\npoetry run coverage run -m pytest -v\n```\n\n## Todo\n\n* [x] Add tests\n* [x] Support decryption with passwords\n* [x] Support older encryption schemes\n* [x] Add function-level tests\n* [x] Add API documents\n* [x] Publish to PyPI\n* [x] Add decryption tests for various file formats\n* [x] Integrate with more comprehensive projects handling MS Office files (such as [oletools](https://github.com/decalage2/oletools/)?) if possible\n* [x] Add the password prompt mode for CLI\n* [x] Improve error types (v4.12.0)\n* [ ] Add type hints\n* [ ] Introduce something like `ctypes.Structure`\n* [x] Support OOXML encryption\n* [ ] Support other encryption\n* [ ] Isolate parser\n* [ ] Redesign APIs (v6.0.0)\n\n## Resources\n\n* \"Backdooring MS Office documents with secret master keys\" [http://secuinside.com/archive/2015/2015-1-9.pdf](https://web.archive.org/web/20171008075059/http://secuinside.com/archive/2015/2015-1-9.pdf)\n* Technical Documents <https://msdn.microsoft.com/en-us/library/cc313105.aspx>\n * [MS-OFFCRYPTO] Agile Encryption <https://msdn.microsoft.com/en-us/library/dd949735(v=office.12).aspx>\n* [MS-OFFDI] Microsoft Office File Format Documentation Introduction <https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-offdi/24ed256c-eb5b-494e-b4f6-fb696ad2b4dc>\n* LibreOffice/core <https://github.com/LibreOffice/core>\n* LibreOffice/mso-dumper <https://github.com/LibreOffice/mso-dumper>\n* wvDecrypt <http://www.skynet.ie/~caolan/Packages/wvDecrypt.html>\n* Microsoft Office password protection - Wikipedia <https://en.wikipedia.org/wiki/Microsoft_Office_password_protection#History_of_Microsoft_Encryption_password>\n* office2john.py <https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/run/office2john.py>\n\n## Alternatives\n\n* herumi/msoffice <https://github.com/herumi/msoffice>\n* DocRecrypt <https://blogs.technet.microsoft.com/office_resource_kit/2013/01/23/now-you-can-reset-or-remove-a-password-from-a-word-excel-or-powerpoint-filewith-office-2013/>\n* Apache POI - the Java API for Microsoft Documents <https://poi.apache.org/>\n\n## Use cases and mentions\n\n### General\n\n* <https://repology.org/project/python:msoffcrypto-tool/versions> (kudos to maintainers!)\n<!-- * <https://checkroth.com/unlocking-password-protected-files.html> (outdated) -->\n\n### Corporate\n\n* Workato <https://docs.workato.com/connectors/python.html#supported-features> <!-- https://web.archive.org/web/20240525062245/https://docs.workato.com/connectors/python.html#supported-features -->\n* Check Point <https://www.checkpoint.com/about-us/copyright-and-trademarks/> <!-- https://web.archive.org/web/20230326071230/https://www.checkpoint.com/about-us/copyright-and-trademarks/ -->\n\n### Malware/maldoc analysis\n\n* <https://github.com/jbremer/sflock/commit/3f6a96abe1dbb4405e4fb7fd0d16863f634b09fb>\n* <https://isc.sans.edu/forums/diary/Video+Analyzing+Encrypted+Malicious+Office+Documents/24572/>\n\n### CTF\n\n* <https://github.com/shombo/cyberstakes-writeps-2018/tree/master/word_up>\n* <https://github.com/willi123yao/Cyberthon2020_Writeups/blob/master/csit/Lost_Magic>\n\n### In other languages\n\n* <https://github.com/dtjohnson/xlsx-populate>\n* <https://github.com/opendocument-app/OpenDocument.core/blob/233663b039/src/internal/ooxml/ooxml_crypto.h>\n* <https://github.com/jaydadhania08/PHPDecryptXLSXWithPassword>\n* <https://github.com/epicentre-msf/rpxl>\n\n### In publications\n\n* [Excel\u3001\u30c7\u30fc\u30bf\u6574\u7406\uff06\u5206\u6790\u3001\u753b\u50cf\u51e6\u7406\u306e\u81ea\u52d5\u5316\u30ef\u30b6\u3092\u5b8c\u5168\u7db2\u7f85\uff01 \u8d85\u901fPython\u4ed5\u4e8b\u8853\u5927\u5168](https://books.google.co.jp/books?id=TBdVEAAAQBAJ&q=msoffcrypto) (\u4f0a\u6ca2\u525b, 2022)\n* [\"Analyse de documents malveillants en 2021\"](https://twitter.com/decalage2/status/1435255507846053889), MISC Hors-s\u00e9rie N\u00b0 24, \"Reverse engineering : apprenez \u00e0 analyser des binaires\" (Lagadec Philippe, 2021)\n* [\u30b7\u30b4\u30c8\u304c\u306f\u304b\u3069\u308b Python\u81ea\u52d5\u51e6\u7406\u306e\u6559\u79d1\u66f8](https://books.google.co.jp/books?id=XEYUEAAAQBAJ&q=msoffcrypto) (\u30af\u30b8\u30e9\u98db\u884c\u673a, 2020)\n\n## Contributors\n\n* <https://github.com/nolze/msoffcrypto-tool/graphs/contributors>\n\n## Credits\n\n* The sample file for XOR Obfuscation is from: <https://github.com/openwall/john-samples/tree/main/Office/Office_Secrets>\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Python tool and library for decrypting and encrypting MS Office files using a password or other keys",
"version": "5.4.2",
"project_urls": {
"Homepage": "https://github.com/nolze/msoffcrypto-tool"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "03547f6d3d9acad083dae8c22d9ab483b657359a1bf56fee1d7af88794677707",
"md5": "b2e722ef3a1bb498693caa37f5aa54a9",
"sha256": "274fe2181702d1e5a107ec1b68a4c9fea997a44972ae1cc9ae0cb4f6a50fef0e"
},
"downloads": -1,
"filename": "msoffcrypto_tool-5.4.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b2e722ef3a1bb498693caa37f5aa54a9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8",
"size": 48713,
"upload_time": "2024-08-08T15:50:27",
"upload_time_iso_8601": "2024-08-08T15:50:27.093707Z",
"url": "https://files.pythonhosted.org/packages/03/54/7f6d3d9acad083dae8c22d9ab483b657359a1bf56fee1d7af88794677707/msoffcrypto_tool-5.4.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d2b70fd6573157e0ec60c0c470e732ab3322fba4d2834fd24e1088d670522a01",
"md5": "b676ce0fb878d22670507a576bce97c7",
"sha256": "44b545adba0407564a0cc3d6dde6ca36b7c0fdf352b85bca51618fa1d4817370"
},
"downloads": -1,
"filename": "msoffcrypto_tool-5.4.2.tar.gz",
"has_sig": false,
"md5_digest": "b676ce0fb878d22670507a576bce97c7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 41183,
"upload_time": "2024-08-08T15:50:28",
"upload_time_iso_8601": "2024-08-08T15:50:28.462256Z",
"url": "https://files.pythonhosted.org/packages/d2/b7/0fd6573157e0ec60c0c470e732ab3322fba4d2834fd24e1088d670522a01/msoffcrypto_tool-5.4.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-08 15:50:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "nolze",
"github_project": "msoffcrypto-tool",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "msoffcrypto-tool"
}