首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  C#

C#/ Python 调用 7z.dll 加解密方法,不使用 exe 调用

  •  
  •   1462326016 · 64 天前 · 3793 次点击
    这是一个创建于 64 天前的主题,其中的信息可能已经有所发展或是发生改变。

    7z.exe 调用的就是 7z.dll ,而且 7z.dll 包含了所有的压缩解压方式。

    一个可行的方案就是通过 shell 的方式调用 7z.exe ,间接去调用 7z.dll 。但是现在有一个大量小文件的压缩解压需求,这种方案的话会频繁的创建进程( 7z.exe )和销毁进程,性能损失太大了,部分文件还需要加密和解密。

    所以想问下有没有人知道怎么调用 7z.dll 直接进行压缩和解压(加密和解密)。

    我知道 7z 是开源的,官方也给了 SDK,但是无奈不会 C++,而且官方给的 SDK 看了半天也没有什么头绪。

    下午的时候搜了搜,找到两个项目也没用上。https://github.com/fancycode/pylzma https://github.com/harvimt/pylib7zip ( 6 年前的项目了,python3.3 )

    因为好多游戏下载网站上都是将游戏数据包压缩存放,然后通过一个 exe 来解压释放的,其中 exe 就调用了 7z.dll ,所以应该不会太难,只是无奈没有文档(我可以看懂的)可以参考。。。

    12 回复  |  直到 2019-10-10 09:13:01 +08:00
        1
    verrickt   64 天前 via Android
    一个思路,c#通过 pinvoke 去调 dll
        2
    1462326016   64 天前
    @verrickt 调用是没有问题的,问题就在于没有一个完整的示例或者文档可以参考,应该传入什么参数,调用哪个函数去要压缩或解压
        3
    est   64 天前
    感觉要构造很多 ctypes 不值得。。
        4
    Laforet   64 天前 via Android
    https://github.com/dsoprea/PyEasyArchive

    参考一下这个项目,其实你说的需求 pylzma 就能做到,没必要头铁去自己调用外部库
        5
    1462326016   64 天前
    @Laforet 好的,我看下,感谢。之前也考虑了 pylzma,但是后来看 pylzma 文档好像不支持加解密?因为需求中不仅要压缩解压,还有好多需要加密解密的文件。
        6
    1462326016   64 天前
    @est 没有办法,现在看来只有这样才能避免反复创建进程导致的性能损失。😢
        7
    TtiGeR   64 天前 via iPhone
    C#的 Wrapper 一搜就有的嘛

    https://github.com/adoconnection/SevenZipExtractor

    我记得 NuGet 应该也有 7z.Lib 之类的
        8
    1462326016   64 天前 via Android
    @TtiGeR 😯感谢感谢,我看下。一直在 GitHub 搜 Python 调用方式,忘记搜 c#了。。失误失误。
        9
    est   64 天前
    @1462326016 可以提前把进程 spawn 出来,stdin 给挂起,然后数据来了直接开始解压。

    类似连接池。
        10
    1462326016   64 天前 via Android
    @est 我没有找到 7z.exe 连续输入输出的方法😥按理说每执行一次应该只能解压一个文件。
        11
    mmdsun   64 天前 via Android
    c#压缩,解压的库很多。去 NuGet 搜搜看。没必要用 7z 吧
        12
    1462326016   64 天前
    @mmdsun python 自带有 lzma 的库,但是我需要加解密的功能,所以自带的不满足要求。因为暂时不知道 7z 的加密原理,是先进行压缩再 AES 加密还是说先 AES 加密再压缩,或者是其他的流程。。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3522 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 05:10 · PVG 13:10 · LAX 21:10 · JFK 00:10
    ♥ Do have faith in what you're doing.