mervick / aes-everywhere

Aes Everywhere - Cross Language AES 256 Encryption Library (Bash, Powershell, C#, Dart, GoLang, Java, JavaScript, Lua, PHP, Python, Ruby, Swift)
Other
474 stars 169 forks source link

(Java & Python) Encrypt using Java, decrypt using Python problem #8

Closed AzriDelta closed 5 years ago

AzriDelta commented 5 years ago

I have trouble to decrypt the encrypted data from Java (Android) by using the Python version.

Below are the encrypted data and decrypted data (using Java) using logging console

Encrypted value: U2FsdGVkX1+Fj1M3NjIHTzMbmWl2PCd0cbK0Dfw00R0= //plaintext is 'TEXT'
Secret Key: m6Cl+NAZ2hqxx8Ulg0WlXR16oiY1zG3O/OyJLKfmbFk= //generated by using SHA-256 for testing purposes
Decrypted value: TEXT

So it can be encrypted and decrypted perfectly using Java.

And below is my attempt to decrypt using Python

from aes256 import aes256

encrypted = b'U2FsdGVkX1+Fj1M3NjIHTzMbmWl2PCd0cbK0Dfw00R0=' #plaintext is 'TEXT', same as above
key = 'm6Cl+NAZ2hqxx8Ulg0WlXR16oiY1zG3O/OyJLKfmbFk=' #still the same key as above

print(encrypted)

# decryption
decrypted = aes256().decrypt(encrypted, key)
print(decrypted)

and it returned

b'U2FsdGVkX1+Fj1M3NjIHTzMbmWl2PCd0cbK0Dfw00R0='
b''

Which means the decryption failed.

However, if I use encryption and decryption key as simple as 'PASSWORD' on both languages, the decryption works.

Is my problem related to the generated key?

mervick commented 5 years ago

Just tested and all works as expected

Java code:

 String encrypted = Aes256.encrypt("TEXT", "m6Cl+NAZ2hqxx8Ulg0WlXR16oiY1zG3O/OyJLKfmbFk=");
 System.out.println(encrypted);

 String decrypted = Aes256.decrypt(encrypted, "m6Cl+NAZ2hqxx8Ulg0WlXR16oiY1zG3O/OyJLKfmbFk=");
 System.out.println(decrypted);

output using dev.mervick.Aes256:

$ /usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -javaagent:/home/izman/IDE/IntelliJIDEA/idea-IU-172.3317.76/lib/idea_rt.jar=37503:/home/izman/IDE/IntelliJIDEA/idea-IU-172.3317.76/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/management-agent.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/rt.jar:/home/data/projects/aes-everywhere/java/compile/production/aes-everywhere dev.mervick.Aes256

U2FsdGVkX1+pk2k8NrOnmcyh2fgWqJOr5IKIaGMnFKo=
TEXT

output using dev.mervick.android.Aes256:

$ /usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -Didea.launcher.port=43049 -Didea.launcher.bin.path=/home/izman/IDE/IntelliJIDEA/idea-IU-172.3317.76/bin -Dfile.encoding=UTF-8 -classpath /home/izman/Android/Sdk/platforms/android-23/android.jar:/home/izman/Android/Sdk/platforms/android-23/data/res:/home/data/projects/aes-everywhere/java/compile/production/aes-everywhere:/home/izman/IDE/IntelliJIDEA/idea-IU-172.3317.76/lib/idea_rt.jar com.intellij.rt.execution.application.AppMainV2 dev.mervick.android.Aes256

U2FsdGVkX19sUn8VZNZg5QsyMtQTA//RXnXaZ4Z5pWw=
TEXT

Python code:

from aes256 import aes256

encrypted = 'U2FsdGVkX1+pk2k8NrOnmcyh2fgWqJOr5IKIaGMnFKo='
key = 'm6Cl+NAZ2hqxx8Ulg0WlXR16oiY1zG3O/OyJLKfmbFk='

print(aes256().decrypt(encrypted, key))

encrypted = 'U2FsdGVkX19sUn8VZNZg5QsyMtQTA//RXnXaZ4Z5pWw='

print(aes256().decrypt(encrypted, key))

Output:

$ python2 /home/data/projects/aes-everywhere/python/src/test.py
TEXT
TEXT
$ python3 /home/data/projects/aes-everywhere/python/src/test.py
b'TEXT'
b'TEXT'

Check your code

AzriDelta commented 5 years ago

Yup, after few testing, the problem is with how I encode the generated key from byte to string in my Android application and how encode the generated key from in python script. Eventhough both keys look similar in string form, but I guess both are different when converted back to byte. Will be looking into it. Sorry for bothering you.