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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

処理が途中で終わってしまう。

aoihello
aoihello

総合スコア27

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0グッド

0クリップ

261閲覧

投稿2022/11/26 07:52

編集2022/11/26 08:07

前提

エラーなしで実行が止まってしまいます。
pythonの勉強を兼ねてプログラムを書いている中で興味があったので、ブルートフォースアッタクについてインターネットで調べながら書いて解読しているので、完璧にコードが理解できている訳ではありません。

実現したいこと

こちらで用意したpdfファイルのパスワードを特定したいです。

発生している問題・エラーメッセージ

エラーが発生していません。

該当のソースコード

Python

1import PyPDF2 2import itertools 3from multiprocessing import Pool 4import datetime 5 6def FileOpen(pw, file_pass): 7 pdf_file = open(file_pass, 'rb') 8 pw = ''.join(pw) 9 try: 10 open(pdf_file, password=pw) 11 print('パスワードは『{}』です'.format(pw)) 12 return True 13 except: 14 pass 15 16 def BruteForceAttack(fill_pass, num_p, alphanumeric, pass_num): 17 p = Pool(num_p) 18 dt_now = datetime.datetime.now() 19 print(dt_now, ",処理開始") 20 for i in pass_num: 21 dt_now = datetime.datetime.now() 22 print(dt_now, ", ", i, "文字開始") 23 24 cnt = 1 25 26 for passlist in itertools.product(alphanumeric, repeat=i): 27 if cnt <= 1: 28 start = datetime.datetime.now() 29 result = p.apply_async(FileOpen, (passlist, file_pass)) 30 result.wait() 31 elif 1 < cnt <= 100: 32 result = p.apply_async(FileOpen, (passlist, file_pass)) 33 result.wait() 34 else: 35 result - p.apply_async(FileOpen, (passlist, file_pass)) 36 37 if cnt == 100: 38 end = datetime.datetime.now() 39 start2end = end - start 40 wait = start2end.total_second() / 100 41 waitspan = 1 42 43 if cnt > 100 and cnt % waitspan == 0: 44 result.wait() 45 46 if result.get() == True: 47 break 48 49 cnt = cnt + 1 50 51 result.wait() 52 dt_now = datetime.datetime.now() 53 print(dt_now, ", ", i, "文字終了") 54 55 if result.get() == True: 56 break 57 58 p.close() 59 p.join() 60 61 dt_now = datetime.datetime.now() 62 print(dt_now, ", 処理終了") 63 64 if __name__ == "__main__": 65 file_pass = "------/2022.pdf" 66 num_p = 2 67 alphanumeric = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 68 pass_num = [1, 2, 3, 4, 5, 6, 7, 8] 69 70 BruteForceAttack(fill_pass, num_p, alphanumeric, pass_num)

試したこと

同じようにブルートフォースアタックについて調べて出てきたプログラムと見比べてみたり他のプログラムを動かしてみたりしたのですが、当プログラムがなぜ途中で止まってしまうのかというのは分かりませんでした。

補足情報(FW/ツールのバージョンなど)

環境はmacです。
少し無理をしてパスワードは6桁にしたのですが、解読できずとも動けるコードが書きたいと思っています。
Pythonに関して全くの初心者なので、ご迷惑をおかけすることが多いかと思います。
上記のプログラムが書かれていたwebsiteです。
https://s6raming.blogspot.com/2021/08/pdf.html

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/11/26 09:12

こちらの質問が複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

ryouuuuoyr

2022/11/26 08:05

Pythonのバージョンはいくつですか?
aoihello

2022/11/26 08:33

確認してみたところ、インストールできているつもりが確認不足でできていませんでした。
ryouuuuoyr

2022/11/26 08:37

インストールできていないとは? エディターとかも教えていただけますか?
aoihello

2022/11/26 08:46

pyenvまではインストールできていたのですがそこから、エラーが出ていて、pythonの環境構築でつまづいていました。 ただいま、インストールを行なっている状況です。
TakaiY

2022/11/26 09:10

質問に表示されているコードのインデントは、手元のコードのインデントと同じでしょうか?
aoihello

2022/11/26 09:12

はい、同じです。
meg_

2022/11/26 10:04

下記ご確認ください。 ・インデントが間違っているようです。 ・「fill_pass」が未定義です。
aoihello

2022/11/26 10:34

ありがとうございます。 インデントについては全くそのような言語とも知らずだったためそこから学び直したいと思います。 first_passについてはPCの情報だったため伏せさせていただきました。
meg_

2022/11/26 10:38 編集

> first_passについてはPCの情報だったため伏せさせていただきました そうではありません。file_passとfill_passの違いのことです。タイプミスでは?との指摘です。
aoihello

2022/11/26 10:42

大変申し訳ありませんでした。 ありがとうございます。 全く気が付きませんでした。タイプミスでした。
TakaiY

2022/11/26 10:42

質問の ・「fill_pass」が未定義です。 で指摘されているのは、 > BruteForceAttack(fill_pass, ... この引数のことです。 多分、file_pass のつづり間違えでしょう。 という指摘ですね。 こういう写し間違えも、動かない原因になるので注意が必要ですね。 ところで、元のコードの file_pass も file_path の間違えでしょうね。
aoihello

2022/11/26 10:48

そのような所でエラーが出ない言語なのですね。使いこなせばすごい言語な分より勉強したいと思います。 ご指摘またご教授いただき誠にありがとうございます。
meg_

2022/11/26 11:06

> そのような所でエラーが出ない言語なのですね。 質問のコードでもインデントを直せば、fill_passのところでちゃんと「NameError」が発生します。今回はそこまでコードが実行されていないということです。TakaiYさんのご指摘通り関数が定義されただけですので。
aoihello

2022/11/26 14:04

大変失礼いたしました。 そういったことだったのですね。 まずインデントを直してからエラーについても学んでいきたいと思います。 ありがとうございます。

回答1

3

ベストアンサー

python はインデントでプログラムの構造を定義している言語です。なので、インデントが異なるとプログラムの意味が変ってしまうので動きません。
質問のコードの通りだとすると、このコードは関数を定義しているだけで起動していないので、実行しても何も起きません。
そのあたりのことがわからないうちは、質問にあるようなコードは手に負えないと思います。

それでも、興味があるのでやってみたいということなら。
■ まずはコードをそのまま移す
現在のコードは手で書き写したのでしょうか?
そうであれば、まずはそのままコピーして貼り付けてみましょう。 そして、インデントも含めて違いがないかどうかよく確かめます。
■ 実行環境を調える。
参照先のサイトの情報は必要な環境の調え方などは載っていませんので、必要なモジュールはimport文を見ればわかるはずなので、入れるなどします。
■実行する
たぶんエラーが出るでしょう。
問題を見つけて対処します。

投稿2022/11/26 10:02

TakaiY

総合スコア10557

meg_, aoihello😄を押しています
ryouuuuoyr👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

aoihello

2022/11/26 10:32

ご回答ありがとうございます。 Pythonについてインデントも理解していなかったため、参照サイトのコピペとも見比べながら勉強してから行おうと思います。 ありがとうございました。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。