Python AES Entschlüsselung

Ich habe das folgende Stück Code in Java, das ich in Python replizieren möchte.

public class AESDecryption { protected SecretKeySpec getPublicKey() { try { byte[] key = "MuidKeibimbtjph9".getBytes("UTF-8"); key = MessageDigest.getInstance("SHA-256").digest(key); key = Arrays.copyOf(key, 32); return new SecretKeySpec(key, "AES"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } public String decrypt(byte[] data) { Cipher cipher = null; try { cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(2, new SecretKeySpec(getPublicKey().getEncoded(), "AES"), new IvParameterSpec(new byte[cipher.getBlockSize()])); byte decryptedBytes[] = cipher.doFinal(data); return new String(Arrays.copyOf(decryptedBytes, decryptedBytes.length - decryptedBytes[-1 + decryptedBytes.length])); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } return ""; } public static void main(String[] args) { try { byte[] content = Files.readAllBytes(Paths.get("/tmp/dump.gzip")); AESDecryption aesDecryption = new AESDecryption(); System.out.println(aesDecryption.decrypt(content)); } catch (IOException e) { e.printStackTrace(); } } } 

Dieser Code stammt aus einer Client-Anwendung. Ich habe keine Macht auf der Serverseite, wo der verschlüsselte Inhalt erzeugt wird. Für diese Frage habe ich den symmetrischen Schlüssel geändert und wie der Inhalt abgerufen wird (in diesem Beispiel aus einer Datei aber in Wirklichkeit aus einer https-Antwort)

Ich möchte diese Funktionalität in einem Python-Skript mit der PyCrypto-Bibliothek replizieren. So sieht mein ursprünglicher Code aus:

 from Crypto.Cipher import AES from Crypto.Hash import SHA256 from Crypto import Random BLOCK_SIZE = 16 unpad = lambda s: s[0:-ord(s[-1])] hash = SHA256.new() hash.update('MuidKeibimbtjph9') symmetric_key = hash.digest() symmetric_key = symmetric_key[:32] bytes_store = None with open('/tmp/dump.gzip','r') as f: bytes_store = f.read() rndfile = Random.new() aes_decryptor = AES.new(symmetric_key, AES.MODE_CBC, rndfile.read(BLOCK_SIZE)) print unpad(aes_decryptor.decrypt(bytes_store)) 

Das Ausführen des Java-Codes auf der verschlüsselten Datei funktioniert ganz gut. Das Ergebnis sieht etwas wie:

 {"code":200,"status":"ok","api_version":"0.0.0","data":[.....],"notifications":{}} 

Doch die Python-Replikation entleert einen "halb entschlüsselten" Text. Naja, so ungefähr..

 =c q[A $ dl  tus":"ok","api_version":"0.0.0","data":[.....],"notifications":{}} 

Ich kann nichts daraus machen. Beim Betrachten des Java-Codes ist klar, dass es keine Pufferung im Cipter-Block gibt, also dachte ich, dass wahrscheinlich die Daten auf der Serverseite bereits ein Vielfaches der Chiffre-Blockgröße sind. Es gab auch viele ▯▯▯ Zeichen am Ende der Python-Ausgabe, aber ich habe mich schnell von ihnen befreit, indem ich entschlüsselte Daten entschlüssige. Dennoch kann ich nicht herausfinden, was ich falsch mache, dass der erste Teil der Nutzlast verschlüsselt wird. Mein Wissen über Datenverschlüsselung ist ziemlich einfach, also bin ich an Sie für Wissen zu erreichen 🙂

One Solution collect form web for “Python AES Entschlüsselung”

Das Problem ist, dass der Server-Code verwendet eine feste IV (was schlecht ist) mit Nullen in ihm, aber in Ihrem Python-Code, passieren Sie eine neue zufällig generierte IV zu AES.new .

Sie können rndfile.read(BLOCK_SIZE) durch "\x00"*BLOCK_SIZE .

  • Einfache Möglichkeit, einen String nach einem Passwort zu codieren?
  • Wie kann ich meinen Code in python drucken
  • Verschlüsseln von Daten in Python -
  • Vigenere cipher 'String Index außerhalb des Bereichs' für die Entschlüsselung
  • Entschlüsseln von Daten in Python, die in Java von Java verschlüsselt wurden
  • Verschlüsseln einer Datei mit RSA in Python
  • Entschlüsseln von Strings in Python, die mit MCRYPT_RIJNDAEL_256 in PHP verschlüsselt wurden
  • Ein guter Weg, um Datenbankfelder zu verschlüsseln?
  • Vigenere Chiffre - nicht korrekte Werte hinzufügen
  • Xor Verschlüsselung / Entschlüsselung einer Datei mit Python 3
  • Welcher symmetrische Cypher für die Verschlüsselung von Nachrichten?
  • Python ist die beste Programmiersprache der Welt.