Skip to content

Instantly share code, notes, and snippets.

@YusukeIwaki
Created May 6, 2025 01:54
Show Gist options
  • Save YusukeIwaki/4cf29dda32579b7b87848060ff652da2 to your computer and use it in GitHub Desktop.
Save YusukeIwaki/4cf29dda32579b7b87848060ff652da2 to your computer and use it in GitHub Desktop.
POVOの生年月日忘れたときに、契約書類のPDFから生年月日を思い出す
# poetry add pypdf
# poetry add cryptography
from pypdf import PdfReader
def check_password(target_file, password):
"""
指定されたPDFファイルのパスワードが正しいかどうかを判定します。
Args:
target_file (str): PDFファイルのパス。
password (str): 試すパスワード。
Returns:
bool: パスワードが正しければ True、そうでなければ False。
PDFファイルが存在しない場合や、パスワードが設定されていない場合も False を返します。
"""
try:
with open(target_file, 'rb') as pdf_file:
pdf_reader = PdfReader(pdf_file)
if pdf_reader.is_encrypted:
return pdf_reader.decrypt(password) > 0
else:
# パスワードが設定されていない場合は False を返す(必要に応じて True に変更できます)
return False
except FileNotFoundError:
print(f"エラー: ファイル '{target_file}' が見つかりません。")
return False
except Exception as e:
print(f"予期せぬエラーが発生しました: {e}")
return False
if __name__ == '__main__':
target_pdf = "JP-xxxxxxxxxxxx_contract_xxxxxx.pdf" # テストするPDFファイルのパス
for year in range(1980, 2010):
for month in range(1, 13):
for day in range(1, 32):
# 年月日を組み合わせてパスワードを生成
password = f"{year}-{month:02}-{day:02}"
if check_password(target_pdf, password):
print(f"パスワードが見つかりました: {password}")
break
password = f"{year}{month:02}"
print(f"試行中のパスワード: {password}")
if check_password(target_pdf, password):
print(f"パスワードが見つかりました: {password}")
break
print("全てのパスワードを試しましたが、正しいパスワードは見つかりませんでした。")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment