Python實現加密壓縮成RAR或ZIP檔案

2022-06-06 07:39:10 字數 2662 閱讀 1952

博主在前兩篇博文分別介紹了加密rar檔案的解壓和加密zip檔案的解壓後面又開始嘗試了兩類檔案的加密壓縮,在查閱相關資料後,發現rarfile庫和zipfile庫都不支援加密壓縮,只能實現普通壓縮,因此另謀他路,發現可以呼叫cmd命令進行壓縮,下面將分別介紹rar和zip檔案的加密壓縮。

呼叫壓縮成rar的cmd命令為:

c:\"

program files

"\winrar\winrar.exe a -p123 c:\test.rar c:\test.txt

命令引數解釋:第乙個引數為winrar軟體的安裝路徑,第二個引數a表示新增壓縮,第三個引數用於設定壓縮密碼,-p加上密碼「123」,第四個引數為壓縮檔案的輸出路徑及其壓縮的檔名,第五個引數為需要壓縮的檔案路徑,如果是單個檔案需要具體到檔名,如果是資料夾下所有檔案,只需到當前資料夾路徑。

呼叫壓縮成zip的cmd命令同rar,只是輸出路徑不同,需將字尾改為.zip:

c:\"

program files

"\winrar\winrar.exe a -p123 c:\test.zip c:\test.txt

在弄清cmd命令後,利用python實現就很容易了,有兩種實現方式:

(1)os.system

(2)subprocess.popen

博主採用了os模組的system實現,下面分別介紹rar和zip的加密壓縮實現:

(1)rar加密壓縮:

1

import

os2 password = "

123"

3 dirpath = "

c:\test.txt"#

待壓縮的檔案路徑及檔案

4 outfullname = "

c:\test.rar"#

壓縮檔案的輸出路徑及檔名

5 cmd = r'

c:\"program files"\winrar\winrar.exe a -p%s %s %s

' % (password, outfullname, dirpath)#

password為壓縮密碼

6 os.system(cmd)

如果上面的**呼叫的winrar為比較新的版本,加密方式即為aes-256加密,如果你想要實現傳統加密,有兩種方法實現:(1)安裝前面介紹的winrar5.4版本;(2)可以在命令列中新增乙個引數:-mezl

**實現也即將第5行修改為:

cmd = r'

c:\"program files"\winrar\winrar.exe a -p%s -mezl %s %s

' % (password, outfullname, dirpath)

(2)zip加密壓縮:

**同rar加密壓縮,只需修改第4行中的壓縮檔案的輸出名為.zip即可

import

ospassword = "

123"

dirpath = "

c:\test.txt"#

待壓縮的檔案路徑及檔案

outfullname = "

c:\test.zip"#

壓縮檔案的輸出路徑及檔名

cmd = r'

c:\"program files"\winrar\winrar.exe a -p%s %s %s

' % (password, outfullname, dirpath)#

password為壓縮密碼

os.system(cmd)

博主在實現過程中測試密碼的時候發現,cmd命令中也存在特殊字元的轉義問題,例如博主在測試的密碼中帶有雙引號時,轉義遇到了很大的麻煩,因為python和cmd中都需要對雙引號進行轉義,在查詢很大資料,嘗試了"" /符號進行轉義都無果,最後進行大量嘗試,發現了cmd中兩種方式能對雙引號進行轉義,(博主的密碼為「123):

(1)雙引號用兩個雙引號引起來,最後再加乙個雙引號,此時壓縮密碼是「123

(2)雙引號前面再加乙個雙引號,此時壓縮密碼仍然是「123

因此博主在**上考慮了引號:

import

osdef

rar():

cmd = r'

c:\"program files"\winrar\winrar.exe a -p%s -mezl %s %s

' %(password, outfullname, dirpath)

print

(cmd)

if__name__ == "

__main__":

dirpath = "

c:\\test

"outfullname = "

c:\\test.rar

"pwd = input("密碼"

) i = '"'

if i in

pwd:

password = pwd.replace('

"','""'

)

print

(password)

else

: password =pwd

rar()

當然cmd中還有/等符號的轉義,還有空格符號的一些處理,有興趣的朋友都可以去了解一下。

java 壓縮成gz檔案

public class gziputil catch filenotfoundexception e gzipoutputstream out null try catch ioexception e byte buf new byte 1024 int len 0 try in.close lo...

python list壓縮成1維

對於規範的且巢狀維度較低的多維列表,python中有很多方法可以實現 a 1,2 3,4 5,6 print j for i in li for j in i orfrom itertools import chain print list chain a orimport itertools a ...

jar 解壓縮後重新壓縮成jar包。

cmd 在jar 解壓縮的目錄下 輸入 jar cvf0m name.jar 就能重新打包成jar。一.jar命令引數 jar命令格式 jar v m e 0 m i c 目錄 檔名.其中這四個引數必須選選其一。v f m e 0 m i 是可選引數,檔名也是必須的。c 建立乙個jar包 t 顯示j...