こんにちは、学校の辞書 (python) を使用して pdf を復号化するスクリプトをプログラミングしています。私は PyPDF2 ライブラリを使用していますが、PDF ファイルは latin-1 でエンコードされており、PyPDF2 はそのエンコードされたファイルを処理できないように見えるため、PDF ファイルの復号化に問題があります。スクリプトを他の PDF ファイル (latin-1 でエンコードされていない) でチェックしたところ、動作するので、その PDF ファイルを UTF-8 でエンコードするか、PyPDF2 を latin-1 で動作させる必要があります。
ここに私のスクリプトがあります:
import PyPDF2
import os
probadas = [] # Lista gobal con todas las claves probadas
errores = [] # Lista global de palabras que dieron fallo
def ejecuta():
res = "Clave no encontrada en ningun diccionario."
dir = './diccionarios/ingles'
for file in os.listdir(dir):
if file.endswith(".txt"):
if diccionario(file):
res = "Clave encontrada en el diccionario: " + file
return res
return res
def reglas(texto):
vocales = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
res = True
text = texto[:1].lower() + texto[1:]
for i in text:
res = res and (i in vocales)
return res
def diccionario(diccionario):
pdf = PyPDF2.PdfFileReader(open('apuntes.pdf', 'rb')) # Abre el archivo pdf a desencriptar
file = open('./diccionarios/ingles/' + diccionario, "r", encoding="utf8", errors='ignore') # Abre el diccionario especificado
temp = file.read().splitlines() # Separa las palabras por lineas, evitando que aparezca '\n' al final de las palabras
global probadas # Lista de claves ya probadas.
global errores # Lista de claves que dan fallo
res = False # Clave no encontrada
palabra = ''
cont = 0
print("\n--- Probando las combinaciones de: " + diccionario)
for palabra in temp:
i = palabra.rstrip()
cont += 1
if len(i) < 5 or not reglas(i) or i in probadas:
pass
else:
if cont % 10000 == 0 and cont != 0:
print(" Probadas " + str(cont) + " combinaciones. Actual: " + i)
try:
if pdf.decrypt(i.lower()): #i.lower().encode('latin-1') # Si se desencripta termina el programa y muestra la contrasena
print("\n La contrasena es: " + i)
res = True
break
return res
else:
probadas.append(i)
except UnicodeEncodeError as error:
print("Error: " + i + " Info: " + str(error))
errores.append(i)
pass
palabra = i
print("\nProbadas todas las "+ str(cont) + " combinaciones del diccionario: " + diccionario + ". Total claves probadas: " + str(len(probadas)) + ". Ultima clave probada: " + palabra)
if not res:
print("Clave no encontrada.")
return res
# EJECUCION DEL SCRIPT
ejecuta()
input("\nPress enter to exit. ")
したがって、「/diccionarios/ingles/」ディレクトリにある辞書を使用してファイル「apuntes.pdf」を復号化しようとしていますが、エラーはコマンドだけです: pdf = PyPDF2.PdfFileReader(open('apuntes.pdf ', 'rb')) および if pdf.decrypt(i.lower()): 任意の単語で復号化しようとすると、次のメッセージが返されます: **
-- プロバンド ラス コンビナシオネス デ: 0_diccionarioIngles1.txt
エラー: aahed 情報: 'latin-1' コーデックは、位置 0 の文字 '\u015e' をエンコードできません: 序数が範囲内にありません (256)
では、その PDF でスクリプトを動作させるにはどうすればよいでしょうか?
ありがとう