officecrypto-tool
officecrypto-tool is a library for js that can be used to decrypt and encrypt office(excel/ppt/word) files..
Special Notes
The implementation of this library refers to xlsx and xlsx-populate, especially xlsx-populate
, part of the source code reference and directly copied over.
Now it supports encryption and decryption of MS office and WPS files
, Support doc docx xls xlsx ppt pptx
decryption, support docx xlsx pptx
encryption.
Contents
Install
npm/yarn/pnpm install officecrypto-tool
Examples
const officeCrypto = require('officecrypto-tool');
const fs = require('fs').promises;
//decrypt a file with a password
(async ()=>{
const input = await fs.readFile(`pass_test.xlsx`);
const output = await officeCrypto.decrypt(input, {password: '123456'});
await fs.writeFile(`out_success.xlsx`, output);
})()
//Setting up encrypted files with passwords
(async ()=>{
const input = await fs.readFile(`test.xlsx`);
const output = officeCrypto.encrypt(input, {password: '123456'});
await fs.writeFile(`standard_out_success.xlsx`, output);
})()
//Determine whether excel file is encrypted or not, support xls and xlsx format, encrypted is true, not encrypted is false.
(async ()=>{
const input = await fs.readFile(`encrypted_test.xlsx`);
const isEncrypted = officeCrypto.isEncrypted(input);
// output: true
const input1 = await fs.readFile(`not_encrypted_test.xlsx`);
const isEncrypted1 = officeCrypto.isEncrypted(input1);
// output: false
})()
Supported encryption methods
OFFICECRYPTO specs
- [x] ECMA-376 (Agile Encryption/Standard Encryption)
- [x] MS-DOCX (OOXML) (Word 2007-2016)
- [x] MS-XLSX (OOXML) (Excel 2007-2016)
- [x] MS-PPTX (OOXML) (PowerPoint 2007-2016)
- [x] Office Binary Document RC4 CryptoAPI
- [x] MS-DOC (Word 2002, 2003, 2004)
- [x] MS-XLS (Excel 2002, 2003, 2004) (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)
- [x] XOR Obfuscation
- [x] MS-XLS
- [] MS-DOC
- [ ] ECMA-376 (Extensible Encryption)
Other
- [ ] Word 95 Encryption And Decryption (Word 95 and prior)
- [ ] Excel 95 Encryption And Decryption (Excel 95 and prior)
- [ ] PowerPoint 95 Encryption And Decryption (PowerPoint 95 and prior)
PRs are welcome!
Tests
With Jest:
pnpm i
pnpm run test
Todo
- [x] Add tests
- [x] Support decryption and encryption with passwords
- [x] Support older encryption schemes
- [x] Add decryption tests for various file formats
- [x] Support frontend
- [ ] Support more encryption and decrytion
Resources
- Technical Documents https://learn.microsoft.com/en-us/openspecs/office_file_formats/MS-OFFFFLP/6ae2fd93-51fc-4e75-a54a-1b175c627b51