開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第Ⅱ部(処理の自動化)、13章(PDFファイルとWordファイル文書)、13.6(演習プロジェクト)、13.6.3(総当たり方式のPDFパスワード解除)の解答を求めてみる。
コード
#!/usr/bin/env python3
import random
import PyPDF2
filename = 'dictionary.txt'
with open(filename) as f:
password = random.choice([line.strip() for line in f])
print(password)
writer = PyPDF2.PdfFileWriter()
writer.encrypt(password)
filename_pdf = 'encrypted.pdf'
with open(filename_pdf, 'wb') as f:
writer.write(f)
with open(filename) as in_file1, \
open(filename_pdf, 'rb') as in_file2:
reader = PyPDF2.PdfFileReader(in_file2)
for line in in_file1:
password = line.strip()
if reader.decrypt(password) == 1 or \
reader.decrypt(password.lower()) == 1:
print(f'{filename_pdf}のパスワードは「{password}」。')
break
else:
print('パスワードは見つからず。。')
入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))
% time ./sample3.py
BLACKSTONE
encrypted.pdfのパスワードは「BLACKSTONE」。
./sample3.py 127.67s user 0.93s system 93% cpu 2:17.61 total
% time ./sample3.py
VIEWING
encrypted.pdfのパスワードは「VIEWING」。
./sample3.py 1074.55s user 5.31s system 96% cpu 18:42.01 total
%
0 コメント:
コメントを投稿