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))
