2016-08-21 2 views
-1

Python 3.5, PyCrypto 2.7a1, Fenster, RC2Wie entschlüsselt man einen RC2-Chiffretext?

Beispiel Chiffrierung:

print('Введите текс, который хотите зашифровать:') 
text = input() 

with open('plaintext.txt', 'w') as f: 
    f.write(text) 

key = os.urandom(32) 

with open('rc2key.bin', 'wb') as keyfile: 
    keyfile.write(key) 

iv = Random.new().read(ARC2.block_size) 

cipher = ARC2.new(key, ARC2.MODE_CFB, iv) 
ciphertext = iv + cipher.encrypt(bytes(text, "utf-8")) 

with open('iv.bin', 'wb') as f: 
    f.write(iv) 

with open('ciphertext.bin', 'wb') as f: 
    f.write(ciphertext) 

print(ciphertext.decode("cp1251")) 

Und ich würde gerne wissen, wie kann ich diesen Text zu entschlüsseln, habe ich versucht, aber es nicht tun kann.

Mein Versuch zu entschlüsseln:

os.system('cls') 
print('Дешифруем значит') 

with open('ciphertext.bin', 'rb') as f: 
    ciphertext = f.read() 

with open('rc2key.bin', 'rb') as f: 
    key = f.read() 

with open('iv.bin', 'rb') as f: 
    iv = f.read() 

ciphertext = ciphertext.decode('cp1251') 
iv = iv.decode('cp1251') 

text = ciphertext.replace(iv, '') 
text = cipher.decrypt(text) 

with open('plaintext.txt', 'w') as f: 
    f.write(text) 

print(text.decode("ascii")) 

Aber ich verstanden, dass ich Chiffre Variable benötigen, und ich kann es nicht .txt oder .bin-Datei speichern, so dass, warum ich um Hilfe zu bitten bin.

+0

Ich kann hier nur den Verschlüsselungscode sehen. Bitte zeigen Sie ein [Minimales, vollständiges und verifizierbares Beispiel] (/ help/mcve) einschließlich des Fehlers, den Sie erhalten. Beachten Sie, dass Sie die * exact * gleichen Bytes des Schlüssels und des IV während der Entschlüsselung verwenden müssen. –

+0

@ArtjomB. bearbeitet – Tukanoid

Antwort

0

Die IV ist ein nicht geheimer Wert und wird üblicherweise vor den Chiffretext geschrieben. Da Sie dies bereits getan haben, müssen Sie keine zusätzliche IV-Datei schreiben. RC2 hat eine Blockgröße von 64 Bit, so dass die IV immer 8 Byte lang ist.

with open('ciphertext.bin', 'rb') as f: 
    ciphertext = f.read() 

with open('rc2key.bin', 'rb') as f: 
    key = f.read() 

iv = ciphertext[:ARC2.block_size] 
ciphertext = ciphertext[ARC2.block_size:] 

cipher = ARC2.new(key, ARC2.MODE_CFB, iv) 
text = cipher.decrypt(ciphertext).decode("utf-8") 

with open('plaintext.txt', 'w') as f: 
    f.write(text) 

print(text) 

Andere Probleme:

  • Sie nicht einfach binäre Daten dekodieren wie Chiffriertexte, Schlüssel oder IV, weil diejenigen, die am ehesten nicht druckbar.

  • Verwenden Sie nicht das gleiche cipher Objekt, wenn Sie etwas anderes machen. Die Entschlüsselung benötigt ein frisch initialisiertes Objekt ARC2.

+0

vielen Dank, du bist der Beste!) – Tukanoid

Verwandte Themen