Java AES Verschlüsselung und Python Entschlüsselung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
al_si
User
Beiträge: 1
Registriert: Montag 6. Januar 2014, 17:06

Ich versuche eine Nachricht in Python zu entschlüsseln die ich in Java verschlüsselt habe. Die Verschlüsselung verlief problemlos.
Benutzt wurde AES mit CBC, PKCS5Padding und zufälligem InitialVektor.
Hier der Java Code:

Code: Alles auswählen

    KeyGenerator keygen = KeyGenerator.getInstance("AES");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    byte[] iv = sr.generateSeed(16);
    IvParameterSpec ivSpec = new IvParameterSpec(iv);
    SecretKey aesKey = keygen.generateKey();
  
    //save byte array in text file to recreate key later
    byte[] encodedKey = aesKey.getEncoded();
    new File("myPath\\AESKey.txt");
    FileOutputStream fos = new FileOutputStream("myPath\\AESKey.txt");
    //save AesKey in first 16 bytes and Initial Vector in next 16 bytes
    fos.write(encodedKey);
    fos.write(iv);
    fos.close();
		   
    String secretText = "Hello cryptography";      
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, aesKey, ivSpec);
    byte[] encrypted = cipher.doFinal(secretText.getBytes());
    BASE64Encoder myEncoder  = new BASE64Encoder();
    String encodedSecretText = myEncoder.encode(encrypted);

    new File("myPath\\encodedSecretText.txt");
    FileOutputStream fos2 = new FileOutputStream("myPath\\encodedSecretText.txt");
    fos2.write(encodedSecretText.getBytes());  
    fos2.close();

In der Entschlüsselung weiß ich nicht wie ich das Problem mit dem Padding lösen soll und bin mir nicht sicher ob das auslesen des Schlüssels und IV richtig ist? Ich hoffe jemand kann mir helfen die Entschlüsselung in Python hinzukriegen!

Code: Alles auswählen

    from Crypto.Cipher import AES
    import base64
    
  
    #read bytes of aesKey
    file = open("myPath/AESKey.txt","rb")
    aesKey = file.read(16)
    iv = file.read(16)
    file.close()
    #for testing hardcoded
    encodedSecretText = 'Sr6p3sinwJHbEqVEu++6qwmLX2JXQmLCmYlFetLpq7w='

    class AESCipher:
        def __init__( self, key ):
            self.key = key

        def decrypt( self, enc ):
            enc = base64.b64decode(enc)
            cipher = AES.new(self.key, AES.MODE_CBC, iv )
            return cipher.decrypt( enc[16:] )

    aes = AESCipher(aesKey)   
    print(aes.decrypt(encodedSecretText))
Für jegliche Hilfe bin ich dankbar!
Antworten