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.