2017-12-10 3 views
1

python3에서이 소프트웨어를 만들었습니다. 문제는 파일을 해독하려면 소프트웨어에서 결과를 쓰지 않는 것입니다. 나는 GUI로 easygui를 사용하고 있습니다. 마지막으로 나는 어떤 오류 메시지도 가지고 있지 않다. 소프트웨어는 보통 닫히기 만하지만 파일은 암호화 된 상태로 유지됩니다. 당신이 필요한 패딩 직접 수행해야합니다 : 당신은 고려 AESCipher.encrypt and AESCipher.decrypt의 요구 사항을 잊어 버린python에서 pycrypto로 암호화 할 수는 있지만 해독 할 수는 없습니다.

def decrypt(key, filename): 
    chunksize = 64 * 1024 
    outputFile = filename[11:] 

    with open(filename, 'rb') as infile: 
     filesize = int(infile.read(16)) 
     IV = infile.read(16) 

     decryptor = AES.new(key, AES.MODE_CBC, IV) 

     with open(outputFile, 'wb') as outfile: 
      while True: 
       chunk = infile.read(chunksize) 

       if len(chunk) == 0: 
        break 

       outfile.write(decryptor.decrypt(chunk)) 
      outfile.truncate(filesize) 


def getKey(password): 
    hasher = SHA256.new(password.encode('utf-8')) 
    return hasher.digest() 


def Main(): 
    image = "./images/encryption.gif" 
    msg = "Do you want to encrypt or decrypt a file ?" 
    choices = ["Encrypt", "Decrypt", "Exit"] 
    reply = buttonbox(msg, image=image, choices=choices) 


    if reply == 'Encrypt': 
     filename = fileopenbox(msg="Select the file to Encrypt",title="Select the file to Encrypt", default='*', filetypes=None, multiple=False) 
     password = passwordbox(msg="Enter a password",title="Enter a password",default="") 
     encrypt(getKey(password),filename) 

    elif reply == 'Decrypt': 
     filename = fileopenbox(msg="Select the file to Decrypt", title="Select the file to Decrypt", default='*', filetypes=None, multiple=False) 
     password = passwordbox(msg="Enter a password",title="Enter a password",default="") 
     decrypt(getKey(password),filename) 

    else: 
     sys.exit(0) 


if __name__ == '__main__': 
    Main() 
+0

GitHub 사이트에 대한 링크와 코드로 구성된 답변을 게시 한 다음 답변을 게시하면 정상적인 동작이 아닙니다. 코드를 게시하려면 패딩/패딩을 제공하고 편집하여 내 대답에 통합하십시오. 당신은 그것을 받아 들일 수 있습니다. –

답변

1

MODE_ECB, MODE_CBC 및 MODE_OFB를 들어

를 (바이트) 일반 텍스트 길이는해야합니다 block_size의 배수 당신이 메시지 (파일 내용)을 제공하지 않는 경우

아마 당신은 캐시에 남아 메시지의 일부로서 16 바이트의 배수가 정확히 그 암호문의 일부를 그리워합니다. 따라서 암호화를 수행 할 때마다 입력 파일에서 0에서 15 바이트가 제거 될 수 있습니다.

분명히 15 바이트 이하의 매우 작은 파일에 대해서는 아무 것도 남지 않을 것입니다.

+0

물론 다른 문제가있을 수 있습니다. StackOverflow는 온라인 디버거가 아니며 어쨌든 디버깅을 수행하는 데 필수적인 정보가 누락되었습니다 (입력, 출력, 암호화 방법 등). –

관련 문제