标题: [文本处理] [已解决] 用7z解密压缩文件,密码有特殊字符”,无法解密码。 [打印本页]
作者: fzp070 时间: 2022-8-10 01:49 标题: [已解决] 用7z解密压缩文件,密码有特殊字符”,无法解密码。
本帖最后由 fzp070 于 2022-8-14 12:22 编辑
问题描述:
1、最近做了个右键调用7z命令行程序,读取密码文档,对压缩程序解密的批处理程序。
2、经过测试,大部分密码都能正常解密,包括带(^&%等特殊字符的密码,都没问题,但唯独密码中有"这个就不行了。
比如密码是2234^可以, 2234”就不行,试了加双引号包起来也不行。不过 2234”这种密码的压缩包可以用7Z界面程序解压缩。
7z.exe x C:\1\A4.7z -p2234" -oC:\1\ -aoa -bse0 -bsp2>out.txt
7z.exe x C:\1\A4.7z -p"2234"" -oC:\1\ -aoa -bse0 -bsp2>out.txt
在论坛搜了下,发现有两个帖子也遇到同样问题,见下
http://www.bathome.net/viewthread.php?tid=57539&highlight=7z
http://www.bathome.net/viewthread.php?tid=56425&highlight=7z
如下链接4楼,据管理员 Batcher 说是7z的命令行模式不支持双引号"作为密码的一部分。
http://bbs.bathome.net/redirect. ... 1349&ptid=56425
因为以上两个帖子是2020年8月、2021年1月的,距现在1年半了, 想问问是不是有方法可以解决此问题了?
另外如果还是无法解决,那有没有可以替代的,因为我只用7z,其它压缩软件不太了解,Winrar、Bandizip、NanaZip等等有命令行工具吗?能命令行解任意字符密码吗?感谢!
作者: xczxczxcz 时间: 2022-8-10 09:55
看看偶用的7Z是不是假的
建立文档:- S>7z a xx.7z a.txt -p"aaa"bbb"ccc
-
- 7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009-02-03
-
- Scanning
-
- Updating archive xx.7z
-
- Compressing a.txt
-
- Everything is Ok
复制代码
解压文档- b>7z e xx.7z -p"aaa"bbb"ccc
-
- 7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009-02-03
-
- Processing archive: xx.7z
-
- Extracting a.txt
-
- Everything is Ok
-
- Size: 98
- Compressed: 221
复制代码
作者: fzp070 时间: 2022-8-10 13:15
呃,我这不行啊,我的7z版本是22.01,难道要4.65版本的?我去找找看能不能下载到- C:\1>7z e xx.7z -p"aaa"bbb"ccc
-
- 7-Zip 22.01 (x64) : Copyright (c) 1999-2022 Igor Pavlov : 2022-07-15
-
- Scanning the drive for archives:
- 1 file, 237 bytes (1 KiB)
-
- Extracting archive: xx.7z
- ERROR: xx.7z
- Cannot open encrypted archive. Wrong password?
-
-
- Can't open as archive: 1
- Files: 0
- Size: 0
- Compressed: 0
-
- C:\1>
复制代码
作者: fzp070 时间: 2022-8-10 13:22
说一下新的尝试:
1、今天已经试过Winrar的命令行了,好像只支持rar格式,这肯定不行,需要解压各种类型,所以排除了。
2、然后试了Bandizip,这个的命令行,与7z很相似,而且一样存在 英标双引号 无法解压缩的问题。
3、另外还发现了一个新问题,无论7z还是Bandizip,遇到压缩包名称含有^时,要么解压不了,要么提示找不到压缩包。不过这点没关系,我可以提前改名,主要是密码我无法控制,有些密码就是有双引号",所以还是想看有什么方法解决。
上面2楼的方法在我这不行,可能是7z版本的差异吧,我等下去下载一个试试,感谢2楼(@xczxczxcz)!
作者: fzp070 时间: 2022-8-10 13:39
回复 2# xczxczxcz
2楼方法已试,7z 4.65也已找了,实际是不行的。
必须是用这个加密的,才能解密,本质上用这个加密时,双引号是丢失了的,密码直接变成了aaabbbccc,所以不行啊
作者: xczxczxcz 时间: 2022-8-10 19:08
回复 5# fzp070
刚才那方法确实把双引号吃了, 掉到7Z的坑里了, 不过不要紧偶等用另一种转义方法,本来不想再写BAT的,今天?
先用 ^转义"号,再用 \(/)转义即可, 即:/^"(或\^",这是转义了一个双引号,不会被吃掉); /^""/^"=";用一对双引号来包裹一个双引号。
====另少看 CSDN 上的文章。能不看则不看。纯属垃圾。- mkdir b
- 7z a x.7z a.txt -paa/^""/^"dd
- copy /y x.7z b\
- cd b
-
- echo 解压文件
- 7z e x.7z -paa/^""/^"dd
- pause
复制代码
:: 你再试试, 偶测了下,木有问题。
.
作者: xczxczxcz 时间: 2022-8-10 19:20
这么多年了,总共加起来用7Z的时间不足半小时,就加了一个7z.exe的环境变量,一直在那睡觉。一般用RAR打开文件看下,更多的是用ZIP,直接用POWERSHELL操作,另外设密码感觉就是为难自己。用一张大硬盘把有用的资料备份后不连机。电脑及文件不设任何密码。一些小的或临时的文件写个FTP上传路由器临时保存。
作者: fzp070 时间: 2022-8-10 20:29
回复 6# xczxczxcz
感谢解答!
不是我想设密码,是网上下载内容经常有密码,而解压要输密码麻烦,所以想右键直接调取本地文件里的密码,直接给解压了。
网上下载的文件压缩格式很多样,7z、zip、rar等都有,winrar命令行工具 只支持他自家的rar格式,zip应该不支持rar、7z等解压吧。
通过斜杠、^、双重双引号转义来确保 双引号”字符的不被吃,这个方法可能就只适于单一明确密码了。
通过变量读取文本内的N多个密码,是没法这样精准添加转义了。除非手动提前一个改好。
哎,看来不好弄,我又试了下NanaZip,发现他的命令行 操作与7z非常类似,不过也遇到这个问题,不过他参数好像多些,再继续研究下
感谢的@xczxczxcz 耐心解答,谢谢!
作者: holley 时间: 2022-8-11 08:45
回复 8# fzp070
先读取密码文件将带"的密码文本转义一遍,再调用可行?
作者: fzp070 时间: 2022-8-11 10:31
回复 9# holley
感谢解答!
1、先读取密码文件将带"的密码文本转义一遍,再调用可行?---应该可行的,我再研究下
2、目前我就是在调用解密过程中,加了个识别密码字符串中是否带双引号",如果有”就转为密码手动输入模式,如果没有双引号就命令自动输入,现在双引号的密码还不太多,所以勉强也行。但还是做不到无人值守、程序自动运行完全程。
3、如果能边解密、边识别双引号的密码字符串、并自动转义,这个方法应该很不错,待我研究下。感谢9楼@holley 提供思路。
其实要是压缩工具,原生支持"双引号",就更好了,我都研究了好几种压缩软件,全部都有这类问题。Winrar的命令行工具 还只支持rar一种格式。无语!
作者: idwma 时间: 2022-8-11 13:42
- echo 2234"|7z.exe x C:\1\A4.7z -oC:\1\ -aoa -bse0 -bsp2>out.txt
复制代码
作者: Batcher 时间: 2022-8-11 14:47
回复 4# fzp070
WinRAR有两个命令行工具:rar.exe和winrar.exe
前者不支持zip文件,后者支持zip文件。
作者: fzp070 时间: 2022-8-11 22:29
回复 11# idwma
感谢解答,等下我试试先!
作者: fzp070 时间: 2022-8-11 22:31
回复 12# Batcher
感谢解答!
之前用的Rar.exe,等下我再试试winrar.exe。
非常感谢大家的帮助!
作者: fzp070 时间: 2022-8-12 00:31
回复 11# idwma
此方法已试,对”双引号"确实可以!
很奇特,7z都没有 -p参数,此时会弹出输入密码状态,此方法将echo 内容通过|直接转给7z,7z刚好在密码输入界面,就自动接收echo输出内容,并下一步,从而实现了密码输入并解压。没想到这么用,论坛能人多,感谢!
不过也有新问题了,具体是我在尝试各种特殊字符密码验证的时候,目前发现含^的密码会出错,原因是echo 内容如果有^会直接消失。不清楚还有没有其它字符会消失。
具体验证一个密码20'`."“48"^"2"^",通过观察发现直接echo会将两个^丢失,应该是这导致解压不成功。两加双引号可以不丢^但echo也会多输出两个"给7z- @echo off
- FOR /F "delims=" %%i in ('echo 20'`."“48"^"2"^"') do (
- echo %%i
- )
- echo 20'`."“48"^"2"^"
- echo "20'`."“48"^"2"^""
- echo 隔1
- set "a=20'`."“48"^"2"^""
- echo %a%
- echo "%a%"
- echo 隔2
- echo %a%%
- echo ^%a%
- echo 隔3
- echo %%a%%^
- echo 隔4
- echo 隔5
- echo 隔6^
- echo end
- echo %a% |7z.exe x raddr.7z -oC:\1\ -aoa -bse0 -bsp2
复制代码
- 20'`."“48""2""
- 20'`."“48""2"^"
- "20'`."“48"^"2"^""
- 隔1
- 20'`."“48""2"^"
- "20'`."“48"^"2"^""
- 隔2
- 20'`."“48""2"^"
- 20'`."“48""2"^"
- 隔3
- %a%echo 隔4
- 隔5
- 隔6echo end
-
- 7-Zip 22.01 (x64) : Copyright (c) 1999-2022 Igor Pavlov : 2022-07-15
-
- Scanning the drive for archives:
- 1 file, 237 bytes (1 KiB)
-
- Extracting archive: raddr.7z
-
- Enter password (will not be echoed):
-
- Can't open as archive: 1
- Files: 0
- Size: 0
- Compressed: 0
- 请按任意键继续. . .
复制代码
作者: idwma 时间: 2022-8-12 12:10
回复 15# fzp070
好像也可以直接用存在文件里的密码- 7z.exe x raddr.7z -oC:\1\ -aoa -bse0 -bsp2 <pwd.txt
复制代码
作者: fzp070 时间: 2022-8-12 23:50
回复 16# idwma
感谢解答!
明天有时间,实际验证下,谢谢分享帮助!
作者: fzp070 时间: 2022-8-13 23:48
本帖最后由 fzp070 于 2022-8-13 23:52 编辑
回复 16# idwma
感谢解答,从文本接收密码的方法,已经试了,这个不行哦
顺便说下目前的进展:
1、上面说得将""双引号之类的代码转换下再作密码接收,弄了好久我没搞定,因为在遇到"|^&等各种特殊符合在一起的密码时,会出错。---目前个人能力暂无法搞定
2、我目前的方法是在密码传进7z解压前进行分类操作:
A、将无英标双引号的密码传给7z的-p密码接收参数,- "%paths%\7z.exe" x %paths1% -p"!pw!" -o%paths2%\ -aoa -bse0 -bsp2>7zOut.txt&&goto pass
复制代码
B、将有双引号但无^符号的传递给echo !pw!|7z,- echo !pw!|7z.exe x %paths1% -o%paths2%\ -aoa -bse0 -bsp2>%paths3%\7zOut.txt&&goto pass
复制代码
C、将既有双引号且有^号的密码,传给密码手动输入界面方案。同时在进入密码手动输入操作前,将密码传递给系统剪切板,在进入密码操作后,按Ctrl+V 或鼠标右键将密码输进去,只需按回车即可。- set/p="!pw!"<nul|clip&&"%paths%\7z.exe" x %paths1% -o%paths2%\ -aoa -bse0 -bsp2>7zOut.txt&&goto pass
复制代码
新问题:
目前三种分类中,A方案、B方案,没什么问题。
但C方案中一般的密码也没问题,只是在遇到中文双引号的密码时会变成英文双引号,导致仍需要人去修正。
我试了用如下命令粘贴出来是的没有问题,但不知道咋将这个粘贴结果传给7z手动输入界面的作为密码接收?- powershell -sta "add-type -as System.Windows.Forms; [windows.forms.clipboard]::GetText()"
复制代码
例如密码为:x^1@#$%&*(:&&}{|3^5"6”4-_aa
大佬们能帮忙看看吗?谢谢了
回复 12# Batcher
作者: fzp070 时间: 2022-8-14 00:53
回复 18# fzp070
CMD窗口粘贴中文双引号 变英文双引号的问题,已经解决了,方法:
CMD窗口--标题栏 右键 属性--选项页--编辑选项--取消勾选【粘贴时筛选剪贴板内容(F)】,这样就能 原样粘贴 了。
这样的话只要粘贴结果正确,我再研究下,看能不能自动粘贴、并在粘贴后 自动回车,实现无人操作即可自动输入密码解压缩。---待明天研究,先睡觉了
作者: fzp070 时间: 2022-8-14 12:20
首先说下结论:
问题已解决。目前工具已实现任何密码均可以自动输入密码进行解压缩。
具体经过:
1、之前在尝试自动输入密码和回车的时候,发现如下三种方式输出密码到剪贴板方式,仍会存在一些问题,如下示例密码就不行,无论加双引号和不加双引号都会出错。- echo !pw!|CLIP
- set/p="!pw!"|clip
- echo "!pw!" |xclip.exe" /set
复制代码
- [b][color=Red]示例密码:[/color][/b]1"@>::”#<$%"*%@“=?(*::"=*}{3"5*!!?%&|=6$”"4……-^_a=*a`~*()-_=+aa
复制代码
2、故又搜索找了好几种方法,包括powershell方式,最终发现 管理员老大在 Batcher 在2008年就分享一个非常好的【支持命令行调用的剪贴板工具winclip.exe】,分享地址:
http://www.bathome.net/viewthrea ... =%BC%F4%CC%F9%B0%E5
3、winclip.exe工具,好像没法直接将字符串发送到剪贴板,但可以从文本中读取后再输出到剪贴板,之后再调取剪贴板内容进行输出到7z,大概流程的代码如下- ::输出当前获取的密码到1.txt文本
- echo !pw!>1.txt
-
- ::从1.txt文本获取并复制到剪贴板
- winclip.exe" -c 1.txt
-
- ::从剪贴板粘贴
- winclip.exe -p
-
- ::这是运用到7z密码输入的方法,这种方式会自动输密码,且会自动回车,非常棒,完美解决本贴问题。
- "%paths%\winclip.exe" -p|"%paths%\7z.exe” x %paths1% -o%paths2%\ -aoa -bse0 -bsp2>%paths3%\7zOut.txt&&goto pass
复制代码
最终感谢:
本次问题能最终解决,离不开本贴所有回复的大佬 给予提供解决方法和解决思路,也离不开【批处理之家】的N多优秀资源和各种问题求助解决信息,非常感谢论坛和大家的帮助!
作者: WBATW 时间: 2023-4-1 12:05
本帖最后由 WBATW 于 2023-4-1 12:14 编辑
一条鱼,有头有尾
作者: yydy777 时间: 2023-8-2 16:04
终于找到解决办法 特来注册感谢
作者: Five66 时间: 2023-8-3 13:07
我也来说一下吧
使用echo命令过管道,"|^&之类的字符需要二次转义
以^为例,要表示^,就需要转义^,即^^,要表示^^,就需要对^^中的每一个^再次进行转义,即^^^^
假设压缩包为密码单个的^,过管道方式测试压缩包(^跟|之间不能有空格)- echo ^^^^|7z t aaaaaaa.7z
复制代码
假设压缩包密码为单个的^,使用普通变量,过管道方式测试压缩包(|符号左边不能有空格)- set "pw=^"
- echo %pw:^=^^^^%|7z t aaaaaaa.7z
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |