Skip to content
Advertisement

Why couldn’t I encrypt and decrypt a photo file using increments?

I made a very simple encryption and decryption program to encrypt files by incrementing all bytes by 6. However, in testing, only text files work. If I use it to encrypt and decrypt photos, the result is not readable by the OS.

Code in Python:

import os.path


class fileEncryptor:

    @staticmethod
    def encrypt(fileLocation, destination):
        if os.path.exists(fileLocation):
            file = open(fileLocation, "rb")
            fileContents = file.read()  # fileContents is a byte string
            file.close()

            btAr = bytearray(fileContents)  # Byte string needs to be changed to byte array to manipulate


            length = len(btAr)
            n = 0
            while n < length:
                increment = 6
                if btAr[n] <= 249:
                    btAr[n] = btAr[n] + increment
                if 249 < btAr[n] <= 255:
                    btAr[n] = btAr[n] - 250
                n = n + 1

            encryptedFile = open(destination, "wb")
            encryptedFile.write(btAr)
            encryptedFile.close()
        else:
            print("File does not exist")

    @staticmethod
    def decrypt(fileLocation, destination):
        if os.path.exists(fileLocation):
            file = open(fileLocation, "rb")
            fileContents = file.read()
            file.close()

            btAr = bytearray(fileContents)

            length = len(btAr)
            n = 0
            while n < length:
                increment = 6
                if 5 < btAr[n] <= 255:
                    btAr[n] = btAr[n] - increment
                if btAr[n] <= 5:
                    btAr[n] = btAr[n] + 250
                n = n + 1

            decryptedFile = open(destination, "wb")
            decryptedFile.write(btAr)
            decryptedFile.close()
        else:
            print("File does not exist")


if __name__ == "__main__":
    fileEncryptor.encrypt("D:Python ProjectsDesignerProjectic.ico", "D:Python ProjectsDesignerProjectoutputic.ico")
    fileEncryptor.decrypt("D:Python ProjectsDesignerProjectoutputic.ico", "D:Python ProjectsDesignerProjectoutputi.ico")

Advertisement

Answer

This part needs to be changed to a else :

if btAr[n] <= 249:
    btAr[n] = btAr[n] + increment
if 249 < btAr[n] <= 255:
    btAr[n] = btAr[n] - 250

Like this :

if btAr[n] <= 249:
    btAr[n] = btAr[n] + increment
else:
    btAr[n] = btAr[n] - 250

Otherwise, if the first if is true, the byte is changed and the second if might be runned, applying twice the increment.

Same for the decryption.

Advertisement