“Paranoid? Probably. But just because you’re paranoid doesn’t mean there isn’t an invisible demon about to eat your face.”
scary… 9:13:00 PM
my solution
# usage pdf_paranoia_encrypt.py
import PyPDF2
import os
import sys
import logging
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s - %(levelname)s - %(message)s")
# TODO: GET PASSWORD FROM COMMAND LINE
if len(sys.argv) == 2:
# TODO: OS WALK FROM CURRENT DIRECTORY
password = sys.argv[1]
for foldername, subfolders, files in os.walk("."):
for file in files:
# TODO: FIND PDFS
if file.endswith(".pdf"):
filename = os.path.abspath(os.path.join(foldername, file))
logging.info("Reading file: " + str(filename))
file = open(filename, "rb")
pdfFileReader = PyPDF2.PdfFileReader(file)
if not pdfFileReader.isEncrypted:
pdfFileWriter = PyPDF2.PdfFileWriter()
# TODO: COPY EVERY PAGE
for pageNum in range(pdfFileReader.numPages):
pdfFileWriter.addPage(pdfFileReader.getPage(pageNum))
# TODO: ENCRYPT EACH PDF FILE
pdfFileWriter.encrypt(password)
logging.info("File " + str(filename) +
" has been successfully encrypted")
# TODO: SAVE FILE
name = (os.path.basename(filename)).split(".")[0]
newname = os.path.join(
foldername, "encrypted_" + name + ".pdf")
newname = os.path.abspath(newname)
resultPdf = open(newname, "wb")
pdfFileWriter.write(resultPdf)
logging.info(
"fFile has been renamed to: " + str(newname))
resultPdf.close()
file.close()
resultPdf = open(newname, "rb")
pdfFileReader = PyPDF2.PdfFileReader(resultPdf)
if pdfFileReader.decrypt(password):
# TODO: DELETES OLD FILE
os.unlink(filename)
logging.info("File " + str(filename) +
" has been successfully deleted")
else:
# DELETE NEWLY ENCRYPTED FILE
os.unlink(newname)
logging.warning(
"Problem while encrypting file: " + str(filename))
file.close()
else:
logging.error("Password required")
# usage python pdf_paranoia_decrypt.pdf
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s - %(levelname)s - %(message)s")
if len(sys.argv) == 2:
password = sys.argv[1]
# TODO:loop through all pdfs
for foldername, subfolders, files in os.walk("."):
for filename in files:
if filename.endswith(".pdf"):
# TODO: decrypt if encrypted
filename = os.path.join(foldername, filename)
filename = os.path.abspath(filename)
fileObj = open(filename, "rb")
pdfFileRead = PyPDF2.PdfFileReader(fileObj)
if not pdfFileRead.isEncrypted:
logging.warning(
"This file: " + str(filename) + " is not encrypted")
continue
try:
pdfFileRead.decrypt(password)
logging.info("File: " + str(filename) +
" was succes. decrypted")
fileObj.close()
except Exception as err:
logging.error("File decryption failed: " + str(err))
# TODO:if failed decryption
# TODO:print error
else:
logging.error("Password required")