请问有什么开源的项目支持导出加密的 xls 文件吗?
试过 java 的 poi, easyexcel, c# 的 npoi, EPPlus, ExcelDataReader ,python 的 msoffcrypto-tool
c++ 的 openoffice, libreoffice ,go 的 excelize 都没有发现没有这个功能。
现在想写 xls 文件的加密,但是一直没有成功,所以想找一些资源来参照,官方文档 完全没有说加密,只说了解密。
1
asdjgfr 157 天前
|
2
SWALLOWW 157 天前 3
换个思路,导出个加密的压缩包?
|
4
zurmokeeper OP @asdjgfr 没有的,这个加解密都不支持的
|
5
zurmokeeper OP @yesterdaysun 都看过了,不支持 xls 格式的加密
|
6
zurmokeeper OP @SWALLOWW 还是想实现 xls 自己的加密,就像 WPS 保存 xls 格式的设密码一样,其实我已经实现了一部分,但是加密以后的文件和 WPS 加密出来还有少量字节数据的差异,不知道哪里不对,所以想找其他资料对比一下
|
7
yesterdaysun 157 天前
https://stackoverflow.com/questions/8817290/create-a-password-protected-excel-file-using-apache-poi
这里提到一个商业库 ExtenXLS 好像可以, 考虑吗? |
8
wxyrrcj 157 天前
|
9
wxyrrcj 157 天前
// 把工作薄输出到字节里面
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 157 天前
再转下 xls 不知道行不行
|
11
zurmokeeper OP @wxyrrcj 不行,xls 不是用 EncryptionMode.agile 加密的,这个是 xlsx 格式用的,xls 有自己的加密算法
|
12
zurmokeeper OP @yesterdaysun 商业的我看不到源码,说是有个 openxls 的开源版,却一直没找到源码
|
13
ShirOvO 157 天前
|
14
zurmokeeper OP @ShirOvO 你这个只是单元格的保护,不是整个文件的保护,发不了图片有点尴尬
|
15
ShirOvO 157 天前
@zurmokeeper #14 你是需要密码才能打开 excel 吗?
|
17
zurmokeeper OP @ShirOvO 我是需要把一个 xls 用密码加密以后导出,WPS 和 office 都是支持的,然后打开的时候输入密码才能打开
|
18
zurmokeeper OP @victorting 这个只支持 xlsx 格式,不支持 xls 的
|
19
ShirOvO 157 天前
@zurmokeeper #17 这样的 xiao'guo'ma 效果吗?导出的 xls 格式的
|
20
cheng6563 157 天前
xls 就是这样的,无标准,那几个字节自己猜吧。
|
21
zurmokeeper OP @ShirOvO 是的,在 MS office 上是这样的
|
22
zurmokeeper OP @cheng6563 不是吧,那岂不是所有做这方面应用的,比如收费的 WPS ,sheetjs 收费版还有一些收费的软件,都得去猜,这样怎么互相做兼容?
|
23
ShirOvO 157 天前
@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 157 天前 via Android
对啊,wps 对 ms 就是会在一些小细节上有一些奇奇怪怪的兼容问题,只是 wps 有能力研发去解决而已,他们自己也以此标榜……再看很久以前的 openoffice 项目的兼容性那就是一团糟
|
25
markss 157 天前
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 157 天前
@zurmokeeper #26 已上传,你可以看看是否符合要求
|
29
zurmokeeper OP @caomu 哭死,这就是那么多不同语言的 excel 开源项目,没有一个实现 xls 加密的原因吗?
|
30
zurmokeeper OP @ShirOvO 感谢,我去看看
|
31
markss 157 天前
试了下,libreoffice gui 保存 xls 文件时候可以选择输入密码,不过命令行 password 参数没有找到相关的文档。
|
32
zurmokeeper OP @ShirOvO 破案了,虽然导出的文件格式虽然是 xls ,但是本质上是个 xlsx 文件,只是把后缀改成 xls 导出而已,我看加密的方案用的都是 xlsx ,我把你上传的文件解密以后就是一个 xlsx 格式的内容,之前我看下 easyexcel 的源码,他的加解密都是基于 poi 实现的,poi 不支持它也不支持
|
33
ShirOvO 157 天前
@zurmokeeper #32 我只是忘了更改 content-type 这个可以更改的
|
34
zurmokeeper OP @markss 大佬可以在这里贴下截图吗? https://github.com/zurmokeeper/officecrypto-tool/issues/17 ,或者帮忙加密保存一个 xls 格式的文件,帮忙贴一下。我之前看了下 libreoffice 在 github 上的源码,我只隐约看到可能有 doc 格式的加密,但是没有发现 xls 加密的代码
|
35
lambdaq 157 天前
@zurmokeeper xlsx 的加密好像就是直接 zip 加密。。。。
|
36
zurmokeeper OP @ShirOvO 大佬,可以再帮忙设置一下,再导出一个 xls 格式的?上传到刚才那个地址吗?我这边 java 环境一直有问题。
|
37
zurmokeeper OP @lambdaq xlsx 也不是,也有自己的加密算法,这个已经实现,大佬有兴趣可以看看 officecrypto-tool 的实现
|
38
lambdaq 157 天前
@zurmokeeper 你实现了每个表单的加密吗?这个好像就麻烦一点。
|
39
shuax 157 天前
猜不到就逆向……
|
40
ShirOvO 157 天前
@zurmokeeper #36 已上传
|
41
markss 157 天前
@zurmokeeper 粘贴了
|
42
zurmokeeper OP @lambdaq 关于 xlsx 格式的加密,微软有给一些文档,同时社区很多语言都有实现,比如 py 的 msoffcrypto-tool 等,所以这个比较简单
|
43
zurmokeeper OP @shuax 现在就是在逆向,但是就是还有一些字节数据,一直加密不对,导致最后始终加密不成功,不知道是哪几个字节出了问题
|
44
zurmokeeper OP @markss 感谢,我看看
|
45
zurmokeeper OP @ShirOvO 感谢,我看看
|
46
markss 157 天前
|
47
ShirOvO 157 天前
@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 157 天前
@zurmokeeper #50 已贴
|
52
zurmokeeper OP @ShirOvO 感谢,现在我的 officecrypto-tool 也可以解密,刚我手动改了源码出问题了,有兴趣一起研究下吗?
|
53
ShirOvO 156 天前
@zurmokeeper #52 只是我没学过 nodejs ,不过对此也有兴趣,可以加个联系方式
|
54
lysShub 156 天前
|
55
jenson47 156 天前
除了 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 回复一下,或者留下大佬的联系方式,我来加你
|