質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

5980閲覧

暗号化zipファイルが解凍できない。python

dokidoki_hamuo

総合スコア38

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/06/17 05:22

編集2019/06/17 06:58

質問

カレントディレクトリの暗号化zipを一気に解凍するプログラムについて。
暗号化zipファイルが解凍できません。パスワードの入力ミスということはないと思われます。(自分でzipファイルのパスワード決め、念のため手動でパスワードを入力して解凍できたため)エラーの原因を教えていただけないでしょうか?
よろしくお願いいたします。

カレントディレクトリに暗号化zip1つをいれて試しました。

Python 3.7.3
windows7

該当するプログラム

python

1import zipfile, os 2myfile =[] 3for filename in os.listdir('.'): 4 if filename.endswith('.zip'): 5 myfile.append(filename) 6 7 for filename in myfile: 8 myfile_obj = zipfile.ZipFile(filename) 9 myfile_obj.extractall(pwd='rabbit'.encode('ascii')) 10 myfile_obj.close

エラーの内容

python

1Traceback (most recent call last): 2 File "C:\Users\userid123\Desktop\作業\python\zip_passbre 3ak.py", line 23, in <module> 4 myfile_obj.extractall(pwd='rabbit'.encode('ascii')) 5 File "C:\Users\userid123\AppData\Local\Programs\Python\Python37\lib\zipfile.py", 6line 1616, in extractall 7 self._extract_member(zipinfo, path, pwd) 8 File "C:\Users\userid123\AppData\Local\Programs\Python\Python37\lib\zipfile.py", 9line 1669, in _extract_member 10 with self.open(member, pwd=pwd) as source, \ 11 File "C:\Users\userid123\AppData\Local\Programs\Python\Python37\lib\zipfile.py", 12line 1538, in open 13 raise RuntimeError("Bad password for file %r" % name) 14RuntimeError: Bad password for file <ZipInfo filename='IMG_0645.jpg' compress_ty 15pe=99 external_attr=0x20 file_size=35427 compress_size=23364> 16

追記

python

1import zipfile, os 2myfile =[] 3for filename in os.listdir('.'): 4 if filename.endswith('.zip'): 5 myfile.append(filename) 6 7 for filename in myfile: 8 myfile_obj = zipfile.ZipFile(filename) 9 myfile_obj.extractall(pwd='rabbit'.encode('ascii')) 10 myfile_obj.close

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

解凍する zip ファイルのリスト myfile を作成してから、そのリストを iterate するので、for filename in myfile 以下の4行のインデントは1つ下げるべきではないでしょうか。

diff

1import zipfile, os 2myfile =[] 3for filename in os.listdir('.'): 4 if filename.endswith('.zip'): 5 myfile.append(filename) 6 7for filename in myfile: 8 myfile_obj = zipfile.ZipFile(filename) 9 myfile_obj.extractall(pwd='rabbit'.encode('ascii')) 10 myfile_obj.close

追記

AES-256bitにしていて、この暗号強度最高にしているのが原因なのでしょうか??

暗号化方式 AES は Python の標準ライブラリ zipfile は対応してないようです。
AES-256 で圧縮したところ、同じエラーが出ました。

AES に対応した pyzipper というライブラリがあるようなので、こちらをお使いください。
pip install pyzipper でインストールできます。

danifus/pyzipper: Python zipfile extensions

使い方は zipfile と全く同じです。

python

1import glob 2import pyzipper 3 4password = b"rabbit" 5 6for path in glob.glob("*.zip"): 7 print(f"extracting... {path}") 8 9 with pyzipper.AESZipFile(path) as f: 10 f.extractall(pwd=password)

投稿2019/06/17 06:42

編集2019/06/17 07:27
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dokidoki_hamuo

2019/06/17 06:56

ご回答ありがとうございます! すみません、確認させていただきたいのですが 以下のように修正するということでしょうか?? import zipfile, os myfile =[] for filename in os.listdir('.'): if filename.endswith('.zip'): myfile.append(filename) for filename in myfile: myfile_obj = zipfile.ZipFile(filename) myfile_obj.extractall(pwd='rabbit'.encode('ascii')) myfile_obj.close
dokidoki_hamuo

2019/06/17 06:57

コメントにのせたらコードが変にそろってしまったので、追記にのせます。
tiitoi

2019/06/17 06:59

回答を修正後のコード全部に変更しましたが、これでどうでしょうか。 自分の環境では、zip のパスを「rabbit」にして、これで解凍できています。
dokidoki_hamuo

2019/06/17 07:12

すみません、なぜか同じエラーになっています。 ちなみにzipの暗号化方法はどれにされていますか? AES-256bitにしていて、この暗号強度最高にしているのが原因なのでしょうか??
tiitoi

2019/06/17 07:27

AES-256 は zipfile モジュールは対応してないようです。 追記に記載したライブラリを使うと解凍できました。
dokidoki_hamuo

2019/06/17 07:32

なるほどーーー!!そういうことだったのですね!! 修正していただいたものでZip2.0互換でやってみたらできました!!! ありがとうございます。 pyzipperを調べてみようと思います。ご丁寧にありがとうございました。
dokidoki_hamuo

2019/06/17 08:02

ご丁寧ご記載していただいたコードであっさりAES-256を解凍できました。 ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問