iOS 資源檔案的解壓縮與加解密

2022-05-27 04:27:07 字數 2064 閱讀 8145

一、目的

解壓縮可以很好的壓縮 多資源 和 大資源,讓包體變小,同一套資源有些許改變,壓縮後檔案的md5也不同。加密是讓壓縮包不能正常解壓,看上去是損壞了的。

二、解壓縮

解壓縮使用的是第三方 ziparchive 庫,個人進行了封裝,直接上原始碼。

壓縮:需要注意的點在注釋中說明了。

/*

! * 壓縮 單個檔案 或 單個資料夾

* eg: demo.txt ==> demo.txt.zip

* demo.bundle ==> demo.bundle.zip

* @param filepath 單個檔案 或 單個資料夾 路徑

* @return 是否壓縮成功 */

+ (bool)wy_archivefileatpath:(nsstring *)filepath

zip"

]; ziparchive *ziparchive =[[ziparchive alloc] initwithfilemanager:fm];

bool ret =[ziparchive createzipfile2:zippath];

if (!ret)

if (isdir) }}

else

if (![ziparchive closezipfile2])

nslog(

@"壓縮 zip 成功");

return

yes;

}

解壓:

/*

! * 解壓壓縮檔案

* eg: demo.txt.zip ==> demo.txt

* demo.bundle.zip ==> demo.bundle

* @param azippath zip檔案路徑

* @return 是否解壓成功 */

+ (bool)wy_unarchivefileatpath:(nsstring *)azippath

nsstring *unzippath =[azippath stringbydeletingpathextension];

ziparchive *ziparchive =[[ziparchive alloc] init];

if([ziparchive unzipopenfile:azippath])

[ziparchive unzipclosefile];

}nslog(

@"解壓 zip 成功");

return

yes;

}

三、加解密

採用異或加密進行簡單的加解密。

四、常見問題

1. macos zip 無法解壓 或者 解壓成 cpgz 死迴圈

可能原因:

1)zip 檔案確實已經損壞;

3)bug 導致;

解壓縮或加密**原因:

1)建立了 zip 但沒有壓縮資源進去 空 zip 無法解壓;(那就新增資源)

2) 壓縮出錯導致無法解壓;(重新操作)

3) 壓縮包資料是加密了的;(需要正常解密才能解壓)

可以使用命令列 unzip zip_path 檢視錯誤原因,以便分析問題所在。

2. 壓縮 bundle 資源資料夾

bundle 本質是資料夾,所以壓縮的時候是以資料夾壓縮的,這點需要特別注意,具體看上文原始碼注釋,很詳細了。

五、使用場景

一般是 使用前對資源的處理 資源 - 壓縮 - 加密 - 加密後的資源包(無法正常解壓)。

使用時 加密後的資源 - 解密 - 解壓 - 拿對應的要使用的資源 - 刪除解壓後的檔案(夾) 這個有點耗效能。

[wyziparchiveutil wy_archivefileatpath:source];

[wyziparchiveutil wy_xorencriptfileatpath:zippath];

[wyziparchiveutil wy_xorencriptfileatpath:zippath];

[wyziparchiveutil wy_unarchivefileatpath:zippath];

iOS檔案的壓縮與解壓縮

一 技術依賴 1.第三方框架 sssziparchive 2.依賴的動態庫 libz.dylib 二 壓縮 1.第一種方法 zipfile 產生的zip檔案的最終路徑 directory 需要進行的壓縮的資料夾路徑 ssziparchive createzipfileatpath zipfile w...

檔案壓縮與解壓縮

類 zipfile 構造方法 zipfile file file 開啟供閱讀的zip檔案,由指定的file物件給出。zipfile file file,int mode 開啟新的zipfile以使用指定模式從指定file物件讀取 zipfile string name 開啟zip檔案進行閱讀 方法摘...

檔案壓縮與解壓縮

public class zipfileutil zipoutputstream zostream null fileinputstream fistream null fileoutputstream fostream null try zostream.closeentry issuccess ...