python3 加密压缩zip_Python实现加密压缩成RAR或ZIP文件

832786a73735792d68ca48d4057baa1a.png博主在前两篇博文分别介绍了加密RAR文件的解压https://www.cnblogs.com/kangbazi666/p/13646308.html和加密ZIP文件的解压https://www.cnblogs.com/kangbazi666/p/13666783.html,后面又开始尝试了两类文件的加密压缩,在查阅相关资料后,发现rarfile库和zipfile库都不支持加密压缩,只能实现普通压缩,因此另谋他路,发现可以调用CMD命令进行压缩,下面将分别介绍RAR和ZIP文件的加密压缩。

调用压缩成RAR的CMD命令为:

C:"Program Files"WinRARWinRAR.exe a -p123 C:est.rar C:est.txt

命令参数解释:第一个参数为WinRAR软件的安装路径,第二个参数a表示添加压缩,第三个参数用于设置压缩密码,-p加上密码“123”,第四个参数为压缩文件的输出路径及其压缩的文件名,第五个参数为需要压缩的文件路径,如果是单个文件需要具体到文件名,如果是文件夹下所有文件,只需到当前文件夹路径。

调用压缩成ZIP的CMD命令同RAR,只是输出路径不同,需将后缀改为.zip:

C:"Program Files"WinRARWinRAR.exe a -p123 C:est.zip C:est.txt

因此首先需要在电脑上安装WinRAR文件,下载链接为:http://www.winrar.com.cn/download.htm ,官网最新版本的WInRAR软件加密方式AES-256加密,如果需要CRC32加密,也即传统加密方式,可以下载WinRAR5.4版本,博主的百度网盘分享链接:https://pan.baidu.com/s/1IyC9TKJ4E8LmMBZAN2kGXw 提取码:dgkt

在弄清CMD命令后,利用Python实现就很容易了,有两种实现方式:

(1)os.system

(2)subprocess.Popen

博主采用了os模块的system实现,下面分别介绍RAR和ZIP的加密压缩实现:

(1)RAR加密压缩:

1 importos2 password = "123"

3 dirpath = "C:est.txt"#待压缩的文件路径及文件

4 outFullName = "C:est.rar"#压缩文件的输出路径及文件名

5 cmd = r"C:"Program Files"WinRARWinRAR.exe a -p%s %s %s" % (password, outFullName, dirpath)#password为压缩密码

6 os.system(cmd)

如果上面的代码调用的WinRAR为比较新的版本,加密方式即为AES-256加密,如果你想要实现传统加密,有两种方法实现:(1)安装前面介绍的WinRAR5.4版本;(2)可以在命令行中添加一个参数:-mezl

73c17357f9b37c1077a8c5f0813ec01c.png

代码实现也即将第5行修改为:

cmd = r"C:"Program Files"WinRARWinRAR.exe a -p%s -mezl %s %s" % (password, outFullName, dirpath)

(2)ZIP加密压缩:

代码同RAR加密压缩,只需修改第4行中的压缩文件的输出名为.zip即可

importos

password= "123"dirpath= "C:est.txt"#待压缩的文件路径及文件

outFullName = "C:est.zip"#压缩文件的输出路径及文件名

cmd = r"C:"Program Files"WinRARWinRAR.exe a -p%s %s %s" % (password, outFullName, dirpath)#password为压缩密码

os.system(cmd)

博主在实现过程中测试密码的时候发现,CMD命令中也存在特殊字符的转义问题,例如博主在测试的密码中带有双引号时,转义遇到了很大的麻烦,因为Python和CMD中都需要对双引号进行转义,在查询很大资料,尝试了"" /符号进行转义都无果,最后进行大量尝试,发现了CMD中两种方式能对双引号进行转义,(博主的密码为“123):

(1)双引号用两个双引号引起来,最后再加一个双引号,此时压缩密码是“123

604c5daad0192aa511880bd2fa2c0668.png

(2)双引号前面再加一个双引号,此时压缩密码仍然是“123

bfeb68c5c622e349695eaf3e6b6119dc.png

因此博主在代码上考虑了引号:

importosdefRar():

cmd= r"C:"Program Files"WinRARWinRAR.exe a -p%s -mezl %s %s" %(password, outFullName, dirpath)print(cmd)if __name__ == "__main__":

dirpath= "C:Test"outFullName= "C:est.rar"pwd= input("密码")

i= """if i inpwd:

password= pwd.replace(""","""")print(password)else:

password=pwd

Rar()

当然CMD中还有/等符号的转义,还有空格符号的一些处理,有兴趣的朋友都可以去了解一下。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值