Python实现加密压缩成RAR或ZIP文件
博主在前两篇博文分别介绍了加密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"\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
因此首先需要在电脑上安装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加密压缩:
import os
password = ""
dirpath = "C:\test.txt"#待压缩的文件路径及文件
outFullName = "C:\test.rar"#压缩文件的输出路径及文件名
cmd = r'C:\"Program Files"\WinRAR\WinRAR.exe a -p%s %s %s' % (password, outFullName, dirpath)#password为压缩密码
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 os
password = ""
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 os def zipDir():
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
当然CMD中还有/等符号的转义,还有空格符号的一些处理,有兴趣的朋友都可以去了解一下。
Python实现加密压缩成RAR或ZIP文件的更多相关文章
- C#压缩或解压(rar和zip文件)
/// <summary> /// 解压RAR和ZIP文件(需存在Winrar.exe(只要自己电脑上可以解压或压缩文件就存在Winrar.exe)) /// </summary&g ...
- Python小技巧:运行目录或ZIP文件
在写Python程序时,将不同功能代码写在不同文件中是一个好习惯,但是对于某些情况.如需要将脚本提供给别人运行使用,如若将程序写在几个文件中,则需要将文件都发给他人.别人就需要管理不同文件,这样对于别 ...
- 在Ubuntu系统中解压rar和zip文件的方法
大家在以前的windows系统中会存有很多rar和zip格式的压缩文件,Ubuntu系统默认情况下对这些文件的支持不是很好,如果直接用"归档管理器"打开会提示错误,因此今天跟大家分 ...
- C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 C# 文件压缩加解密
C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求. 下载地址:http:// ...
- webpack7--css压缩成单独的css文件
先看下下面的图片: 我们可以看到,通过Webpack打包后,默认CSS是通过 内部样式表 写入的.我们如何把压缩后的CSS单独导出为CSS 呢? 1.安装 extract-text-webpack-p ...
- Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)
1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...
- RAR和ZIP:压缩大战真相
转:http://fqd2eh4y.blog.163.com/blog/static/69195855200801035015857 前言--王者归来? 等待足足两年之久,压缩霸主WinZip终于在万 ...
- RAR和ZIP:压缩大战真相 (挺赞值得了解)
前言--王者归来? 等待足足两年之久,压缩霸主WinZip终于在万众期待下发布了9.0正式版.全世界自然一片沸腾,在世界各大知名下载网站中,WinZip9.0再次带起下载狂潮.然而此时国内并没有王者回 ...
- linux 系统下 zip 的加密压缩与解压缩命令
1.加密压缩 [small@sun shine]# zip -rP king java.zip java adding: java/ (stored 0%) adding: java/default/ ...
随机推荐
- gtk.Builder.AddFromFile SIGSEGV.
可能是由于GTK没有初始化的缘故,在程序开头加上gtk.Init(nil)进行初始化 或者参考我这篇博客就不会出错了
- HBA卡常用命令
HBA卡信息查看 查看对应的PCI设备lspci | grep LSI 如下:对应的HBA卡命令为sas3ircu 如下:对应的HBA卡使用sas2ircu 查看LSI控制器类型和型号 sas2irc ...
- 【Apollo】(2)--- Apollo架构设计
Apollo架构设计 上一篇博客有讲到:[Apollo](1)--- Apollo入门介绍篇 这篇来写Apollo的核心架构设计 一.整体架构 Apollo整体架构图,已由作者宋顺已经给出: 这幅图所 ...
- JDK1.8源码学习-LinkedList
JDK1.8源码学习-LinkedList 目录 一.LinkedList简介 LinkedList是一个继承于AbstractSequentialList的双向链表,是可以在任意位置进行插入和移除操 ...
- MIT 6.828 | JOS | 关于虚拟空间和物理空间的总结
Question: 做lab过程中越来越迷糊,为什么一会儿虚拟地址是4G 物理地址也是4G ,那这有什么作用呢? 解决途径: 停下来,根据当前lab的进展,再回头看上学期操作系统的ppt & ...
- Java泛型详解,通俗易懂只需5分钟
转载出处:http://www.weixueyuan.net/view/6321.html 我们知道,使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值. 假如我 ...
- Java进阶专题(十一) 探究JMM
前言 JMM即java内存模型,JMM研究的就是多线程下Java代码的执行顺序,共享变量的读写.它定义了Java虚拟机在计算机内存中的工作方式.从抽象角度看,JMM定义了线程和主存之间的抽象关系: ...
- .Net Core中的诊断日志DiagnosticSource讲解
前言 近期由于需要进行分布式链路跟踪系统的技术选型,所以一直在研究链路跟踪相关的框架.作为能在.Net Core中使用的APM,SkyWalking自然成为了首选.SkyAPM-dotnet是 ...
- java前端知识点整理
1.jsp内置对象?作用? request :客户端请求,包含来自 GET/POST,提供了几个用于获取 cookie, 和 session 的方法 response :网页传回用户端的回应 page ...
- Java实现IO通信(服务器篇)
Java实现IO通信(服务器篇) 如何利用java实现我们的通信呢?首先我们了解一下什么是通信?通信的机制是怎样的? 首先来讨论一下什么是通信?通信,指人与人或人与自然之间通过某种行为或媒介进行的信息 ...