
请问有什么开源的项目支持导出加密的 xls 文件吗?
试过 java 的 poi, easyexcel, c# 的 npoi, EPPlus, ExcelDataReader ,python 的 msoffcrypto-tool
c++ 的 openoffice, libreoffice ,go 的 excelize 都没有发现没有这个功能。
现在想写 xls 文件的加密,但是一直没有成功,所以想找一些资源来参照,官方文档 完全没有说加密,只说了解密。
1 asdjgfr 2024-07-25 09:28:43 +08:00 |
2 SWALLOWW 2024-07-25 09:34:01 +08:00 换个思路,导出个加密的压缩包? |
3 yesterdaysun 2024-07-25 09:36:16 +08:00 |
4 zurmokeeper OP @asdjgfr 没有的,这个加解密都不支持的 |
5 zurmokeeper OP @yesterdaysun 都看过了,不支持 xls 格式的加密 |
6 zurmokeeper OP @SWALLOWW 还是想实现 xls 自己的加密,就像 WPS 保存 xls 格式的设密码一样,其实我已经实现了一部分,但是加密以后的文件和 WPS 加密出来还有少量字节数据的差异,不知道哪里不对,所以想找其他资料对比一下 |
7 yesterdaysun 2024-07-25 10:02:28 +08:00 https://stackoverflow.com/questions/8817290/create-a-password-protected-excel-file-using-apache-poi 这里提到一个商业库 ExtenXLS 好像可以, 考虑吗? |
8 wxyrrcj 2024-07-25 10:36:30 +08:00 |
9 wxyrrcj 2024-07-25 10:39:23 +08:00 // 把工作薄输出到字节里面 bout = new ByteArrayOutputStream(); workbook.write(bout); bout.flush(); workbookinput = new ByteArrayInputStream(bout.toByteArray()); // 读取临时文件进行加密 POIFSFileSystem fs = new POIFSFileSystem(); EncryptionInfo info = new EncryptionInfo(fs, EncryptionMode.agile); Encryptor enc = info.getEncryptor(); enc.confirmPassword("123456");//打开 excel 密码 // 然后把字节输入到输入流,然后输入到 OPC 包里面 opc = OPCPackage.open(workbookinput); os = enc.getDataStream(fs); opc.save(os); opc.close(); // 返回给浏览器 outstream = response.getOutputStream(); response.reset(); response.setHeader("Content-disposition", "attachment; filename=" + new String(title.getBytes(), "UTF-8") + ".xlsx"); response.setContentType("application/x-download"); fs.writeFilesystem(outstream); |
10 wxyrrcj 2024-07-25 10:40:00 +08:00 再转下 xls 不知道行不行 |
11 zurmokeeper OP @wxyrrcj 不行,xls 不是用 EncryptionMode.agile 加密的,这个是 xlsx 格式用的,xls 有自己的加密算法 |
12 zurmokeeper OP @yesterdaysun 商业的我看不到源码,说是有个 openxls 的开源版,却一直没找到源码 |
13 ShirOvO 2024-07-25 11:42:09 +08:00 |
14 zurmokeeper OP @ShirOvO 你这个只是单元格的保护,不是整个文件的保护,发不了图片有点尴尬 |
15 ShirOvO 2024-07-25 13:38:37 +08:00 @zurmokeeper #14 你是需要密码才能打开 excel 吗? |
16 victorting 2024-07-25 13:39:31 +08:00 |
17 zurmokeeper OP @ShirOvO 我是需要把一个 xls 用密码加密以后导出,WPS 和 office 都是支持的,然后打开的时候输入密码才能打开 |
18 zurmokeeper OP @victorting 这个只支持 xlsx 格式,不支持 xls 的 |
19 ShirOvO 2024-07-25 13:45:22 +08:00 @zurmokeeper #17 这样的 xiao'guo'ma 效果吗?导出的 xls 格式的 |
20 cheng6563 2024-07-25 13:46:11 +08:00 xls 就是这样的,无标准,那几个字节自己猜吧。 |
21 zurmokeeper OP @ShirOvO 是的,在 MS office 上是这样的 |
22 zurmokeeper OP @cheng6563 不是吧,那岂不是所有做这方面应用的,比如收费的 WPS ,sheetjs 收费版还有一些收费的软件,都得去猜,这样怎么互相做兼容? |
23 ShirOvO 2024-07-25 13:56:56 +08:00 @zurmokeeper #21 我刚才在 wps 也测试了一下,也是一样的效果,是使用的 easyexcel 实现的,参考代码 EasyExcelFactory.write(response.getOutputStream(), objectClass).registerWriteHandler(new CustomSheetWriteHandler()).registerWriteHandler(new StyleWriteHandler()) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .autoCloseStream(Boolean.FALSE).password("123").sheet(sheetName).doWrite(list);,password('密码')方法就是设置密码 |
24 caomu 2024-07-25 13:57:47 +08:00 via Android 对啊,wps 对 ms 就是会在一些小细节上有一些奇奇怪怪的兼容问题,只是 wps 有能力研发去解决而已,他们自己也以此标榜……再看很久以前的 openoffice 项目的兼容性那就是一团糟 |
25 markss 2024-07-25 14:04:02 +08:00 xls2xlsx 在对 xlsx 进行加密是否可以满足要求? |
26 zurmokeeper OP @ShirOvO 不知道 v 站这里能发文件,大佬可以 https://github.com/zurmokeeper/officecrypto-tool/issues/17 在这个 issue 这里,把你用 easyexcel 加密生成以后的 excel 上传一下吗? |
27 zurmokeeper OP @markss 不行,我只是想实现 xls 格式的加密,xlsx 格式的加密已经实现了。不过请问下你说的 xls2xlsx 有具体的实现吗?是说找个工具把 xls 先转成 xlsx ,然后再对 xlsx 去加密? |
28 ShirOvO 2024-07-25 14:11:38 +08:00 @zurmokeeper #26 已上传,你可以看看是否符合要求 |
29 zurmokeeper OP @caomu 哭死,这就是那么多不同语言的 excel 开源项目,没有一个实现 xls 加密的原因吗? |
30 zurmokeeper OP @ShirOvO 感谢,我去看看 |
31 markss 2024-07-25 14:27:52 +08:00 试了下,libreoffice gui 保存 xls 文件时候可以选择输入密码,不过命令行 password 参数没有找到相关的文档。 |
32 zurmokeeper OP @ShirOvO 破案了,虽然导出的文件格式虽然是 xls ,但是本质上是个 xlsx 文件,只是把后缀改成 xls 导出而已,我看加密的方案用的都是 xlsx ,我把你上传的文件解密以后就是一个 xlsx 格式的内容,之前我看下 easyexcel 的源码,他的加解密都是基于 poi 实现的,poi 不支持它也不支持 |
33 ShirOvO 2024-07-25 14:45:14 +08:00 @zurmokeeper #32 我只是忘了更改 content-type 这个可以更改的 |
34 zurmokeeper OP @markss 大佬可以在这里贴下截图吗? https://github.com/zurmokeeper/officecrypto-tool/issues/17 ,或者帮忙加密保存一个 xls 格式的文件,帮忙贴一下。我之前看了下 libreoffice 在 github 上的源码,我只隐约看到可能有 doc 格式的加密,但是没有发现 xls 加密的代码 |
35 tf2 2024-07-25 14:47:05 +08:00 @zurmokeeper xlsx 的加密好像就是直接 zip 加密。。。。 |
36 zurmokeeper OP @ShirOvO 大佬,可以再帮忙设置一下,再导出一个 xls 格式的?上传到刚才那个地址吗?我这边 java 环境一直有问题。 |
37 zurmokeeper OP @lambdaq xlsx 也不是,也有自己的加密算法,这个已经实现,大佬有兴趣可以看看 officecrypto-tool 的实现 |
38 tf2 2024-07-25 14:52:36 +08:00 @zurmokeeper 你实现了每个表单的加密吗?这个好像就麻烦一点。 |
39 momo1999 2024-07-25 14:56:11 +08:00 猜不到就逆向…… |
40 ShirOvO 2024-07-25 15:00:40 +08:00 @zurmokeeper #36 已上传 |
41 markss 2024-07-25 15:01:34 +08:00 @zurmokeeper 粘贴了 |
42 zurmokeeper OP @lambdaq 关于 xlsx 格式的加密,微软有给一些文档,同时社区很多语言都有实现,比如 py 的 msoffcrypto-tool 等,所以这个比较简单 |
43 zurmokeeper OP @shuax 现在就是在逆向,但是就是还有一些字节数据,一直加密不对,导致最后始终加密不成功,不知道是哪几个字节出了问题 |
44 zurmokeeper OP @markss 感谢,我看看 |
45 zurmokeeper OP @ShirOvO 感谢,我看看 |
46 markss 2024-07-25 16:38:54 +08:00 |
47 ShirOvO 2024-07-25 16:41:00 +08:00 @zurmokeeper #45 有突破吗? |
48 zurmokeeper OP @ShirOvO 刚忙其他了,简单看了下的确是 xls 格式的加密,但是有点奇怪用 WPS 能打开,但是用我自己的 officecrypto-tool 却报密码错误,不知道是哪里有问题,还要再看看 |
49 zurmokeeper OP @markss libre_123.xls 的确是加密成功了,也能正常解,不知道是不是我哪里看漏了,得好好看下源码 |
50 zurmokeeper OP @ShirOvO 大佬可以把完整的导出加密的代码贴一下到 github issue 吗?我不是很懂 java ,后续得慢慢研究 debug |
51 ShirOvO 2024-07-25 17:36:15 +08:00 @zurmokeeper #50 已贴 |
52 zurmokeeper OP @ShirOvO 感谢,现在我的 officecrypto-tool 也可以解密,刚我手动改了源码出问题了,有兴趣一起研究下吗? |
53 ShirOvO 2024-07-25 18:44:48 +08:00 @zurmokeeper #52 只是我没学过 nodejs ,不过对此也有兴趣,可以加个联系方式 |
54 lysShub 2024-07-25 19:28:52 +08:00 |
55 jenson47 2024-07-25 19:57:47 +08:00 除了 excel 之外,其实 word 也可以使用,正如 #35 楼所说的,我认为是 tar 包加密,实际上 word ,excel 之前就是个 tar 包 加密实现可以参考这个 https://github.com/nick322/secure-spreadsheet |
56 zurmokeeper OP @lysShub 这个只是 xlsx 格式的加密,不是 xls 的,算法实现不一样 |
57 zurmokeeper OP @jenson47 xlsx, docx, pptx 本质上是个 zip ,就是新的 ooxml 格式,但是 xls ,doc, ppt 这些老的格式不一样,加解密的算法不一样,这个我看了是 xlsx 的 |
58 zurmokeeper OP @ShirOvO https://github.com/zurmokeeper/officecrypto-tool/issues/30 我在这里留了微信了,不过设置了隐私,麻烦加的时候 issue 回复一下,或者留下大佬的联系方式,我来加你 |