'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 Projects\DesignerProject\ic.ico", "D:\Python Projects\DesignerProject\output\ic.ico")
fileEncryptor.decrypt("D:\Python Projects\DesignerProject\output\ic.ico", "D:\Python Projects\DesignerProject\output\i.ico")
Solution 1:[1]
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.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Robert Vanden Eynde |
