1个不稳定版本
0.1.0 | 2023年1月18日 |
---|
#2117 在 解析器实现
271 每月下载次数
51KB
995 行
office-crypto
纯Rust库,用于解密受密码保护的MS Office文件。
示例
此包公开了两个函数:decrypt_from_file
和 decrypt_from_bytes
,它们确实做了它们所说的。然后,结果字节可以被任何MS Office解析器解释,例如 docx 或 calamine。
use docx::DocxFile;
use office_crypto::decrypt_from_file;
use std::io::Cursor;
let decrypted: Vec<u8> = decrypt_from_file("protected.docx", "Password1234_").unwrap();
let docx = DocxFile::from_reader(Cursor::new(decrypted)).unwrap();
let docx = docx.parse().unwrap();
// Now we can access the docx content
格式
- ECMA-376 (敏捷加密/标准加密)
- MS-DOCX (OOXML) (Word 2007及以后)
- MS-XLSX (OOXML) (Excel 2007及以后)
- MS-PPTX (OOXML) (PowerPoint 2007及以后)
- Office二进制文档RC4 CryptoAPI
- MS-DOC (Word 2002, 2003, 2004)
- MS-XLS (Excel 2002, 2003, 2004)
- MS-PPT (PowerPoint 2002, 2003, 2004)
- ECMA-376 (可扩展加密)
尚未实现非SHA512哈希函数。这仅影响敏捷加密文件,但到目前为止,我还没有找到不使用SHA512的。
性能
在M1 Pro上测量
running 3 tests
test bench_agile_sha512 ... bench: 27,106,487 ns/iter (+/- 505,175)
test bench_agile_sha512_large ... bench: 71,372,716 ns/iter (+/- 3,915,458)
test bench_standard ... bench: 6,379,766 ns/iter (+/- 100,688)
测试文件大小
bench_agile_sha512
=> 25 KBbench_agile_sha512_large
=> 7.1 MBbench_standard
=> 7 KB
请注意,Word的最新版本将创建一个敏捷加密文档。
致谢
此包本质上是从 msoffcrypto 和 olefile 中移植了OOXML特定的功能。
依赖关系
~4.5MB
~90K SLoC