2017-03-06 4 views
-1

Ich habe zwei Python-Skripte geschrieben. Eine davon kodiert die Datei in eine Binärdatei und speichert sie als Textdatei für die spätere Entschlüsselung. Das andere Skript kann die Textdatei wieder in lesbare Informationen umwandeln, oder zumindest ist das mein Ziel.Python binary vermasselt einige Dateien

Skript 1 (encrypt) (verwenden Sie alle .png Bilddatei als Eingabe, jede TXT-Datei als Ausgabe):

u_input = input("What file to encrypt?") 
file_store = input("Where do you want to store the binary?") 
character = "" #Blank for now 
encrypted = "" #Blank for now, stores the bytes before they are written 

with open(u_input, 'rb') as f: 
    while True: 
     c = f.read(1) 
     if not c: 
      f.close() 
      break 
     encrypted = encrypted + str(bin(ord(c))[2:].zfill(8)) 
print("") 
print(encrypted) # This line is not necessary, but I have included it to show that the encryption works 
print("") 
with open(file_store, 'wb') as f: 
    f.write(bytes(encrypted, 'UTF-8')) 
    f.close() 

Soweit ich sagen kann, ist dies für Textdateien in Ordnung funktioniert (. txt)

ich habe dann ein zweites Skript (die Datei) Verwenden der zuvor erstellten .txt-Datei als Quelle, jede Datei als .png dest zu entschlüsseln:

u_input =("Sourcefile:") 
file_store = input("Decrypted output:") 
character = "" 
decoded_string = "" 

with open(u_input, 'r' as f: 
    while True: 
     c = f.read(1) 
     if not c: 
      f.close() 
      break 
     character = character + c 
     if len(character) % 8 == 0: 
      decoded_string = decoded_string + chr(int(character, 2)) 
      character = "" 

with open(file_store, 'wb') as f: 
    f.write(bytes(decoded_string, 'UTF-8')) 
    f.close() 
    print("SUCCESS!") 

Was teilweise funktioniert. d.h. es schreibt die Datei. Ich kann es jedoch nicht öffnen oder bearbeiten. Wenn ich meine Originaldatei (img.png) mit meiner zweiten Datei (img2.png) vergleiche, sehe ich, dass Zeichen ersetzt oder Zeilenumbrüche nicht korrekt eingegeben wurden. Ich kann die Datei in keinem Bildanzeige-/Bearbeitungsprogramm anzeigen. Ich verstehe nicht warum.

Bitte könnte jemand versuchen zu erklären und eine Lösung (wenn auch teilweise) zu bieten? Danke im Voraus.

Hinweis: Ich bin mir bewusst, dass meine Verwendung von „Verschlüsselung“ und „Entschlüsselung“ notwendigerweise nicht korrekt verwendet, aber das ist ein persönliches Projekt, so dass es nicht egal, ich

+0

'"% s "% u_input'? Was erwartest du, dass 'u_input' das nicht alleine tun kann? –

+0

Danke für deinen Vorschlag, mein Skript entsprechend bearbeitet –

+0

Was versuchst du zu erreichen? Es sieht so aus, als würden Sie Ihren eigenen Codec rollen lassen, aber Sie können wahrscheinlich stattdessen einfach base64 verwenden. –

Antwort

0

Es Sie erscheint Verwenden Sie Python 3, wie Sie einen UTF-8 Parameter auf den bytes Anruf setzen. Das ist dein Problem - die Eingabe sollte in eine Byte-Zeichenkette dekodiert werden, aber du stellst stattdessen eine Unicode-Zeichenkette zusammen, und die Konvertierung ist nicht 1: 1. Es ist leicht zu beheben.

Für eine Version, die in Python 2 und Python 3 funktioniert, eine weitere kleine Änderung. Dies ist für mich in Python 3.5 schneller und sollte daher die bevorzugte Methode sein.

import struct 
# ... 
decoded_string = decoded_string + struct.pack('B', int(character, 2)) 
+0

Ich werde dies in Kürze versuchen, und ich werde Sie die Ergebnisse wissen lassen. –

+0

Vielen Dank für Ihre Hilfe, dies hat mein Programm behoben und es funktioniert jetzt wie es soll. Sehr geschätzt. –

+0

Bitte helfen Sie, ich habe versucht, den Code auf einer anderen Python-Installation auszuführen und jetzt enthält die ausgegebene Datei eckige Klammern mit Zahlen anstelle der Daten. Was kann ich tun, um das zu beheben? Vielen Dank. –