2016-02-18 3 views
0

Я пытаюсь расшифровать некоторые зашифрованные изображения .jpg с помощью питона CryptoШифрование/Расшифровка в Python; дешифрования не работает

def decrypt(input_filename, output_filename, password, cipher): 
     ciphers = ['AES_ECB'] 
     key = generate_key(password) 
     #Loading Pixel Data 
     im = Image.open(input_filename) 
     pix = im.load() 
     rgb_im = im.convert('RGB') 
     size = im.size 
     image = Image.new('RGB', im.size) 
     pix1=image.load() 
     print "Filesize: " + str(size) 
     for x in range(256): 
      for y in range (256): 
       pixel = rgb_im.getpixel((x, y)) 
       print pixel#DEBUG 
       if cipher == ciphers[0]: 
       print x,y 
       pix1[x,y] = decryptPixel(pixel, key) 
    image.save(output_filename) 

Но я получил эту ошибку:

 17    if cipher == ciphers[0]: 
     18     print x,y 
    ---> 19     pix1[x,y] = decryptPixel(pixel, key) 
     20  image.save(output_filename) 

OverflowError: Python int too large to convert to C long 

Не могли бы вы мне помочь, чтобы выяснить проблему ?

def decryptPixelComponent(component, key): 
    decryptor = AES.new(key, AES.MODE_ECB) 
    component_hash = hashlib.sha256(str(component)).digest() 
    component = decryptor.decrypt(component_hash).encode('hex') 
    #print int(component, 16) 
    return int(component, 16) 
def decryptPixel(pixel, key): 
     (red, green, blue) = pixel 
     return (decryptPixelComponent(red, key), 
     decryptPixelComponent(green, key), 
     decryptPixelComponent(blue, key)) 

В результате «decryptPixel» кортеж и pix1 тоже кортеж. Однако, когда я пытаюсь обновить pix1, я получил эту ошибку переполнения.

+0

Просьба представить весь код, необходимый для диагностики проблемы. Как определяется 'decryptPixel'? Как вы его зашифровали? –

+0

это строка, которая вызывает проблемуpix1 [x, y] = decryptPixel (пиксель, ключ) – Yacoub

ответ

0

Глядя на функцию «decryptPixelComponent», кажется, вы расшифровываете хэш-значение пикселя («component_hash»). Я думаю, вы должны попытаться расшифровать без хеша («компонент»).

def decryptPixelComponent(component, key): 
    decryptor = AES.new(key, AES.MODE_ECB) 
    component = decryptor.decrypt(component).encode('hex') 
    #print int(component, 16) 
    return int(component, 16) 
Смежные вопросы