@@ -0,0 +1,1266 @@
+package fi.iki.murgo.irssinotifier;%0A%0Aimport javax.crypto.Cipher;%0Aimport javax.crypto.SecretKeyFactory;%0Aimport javax.crypto.spec.PBEKeySpec;%0A%0Aimport android.util.Base64;%0Aimport android.util.Log;%0A%0Apublic class Crypto %7B%0A%09private static final String TAG = Crypto.class.getSimpleName();%0A%0A%09public static String decrypt(String key, String payload) %7B%0A%09%09try %7B%0A%09%09%09byte%5B%5D encrypted = base64ToBytes(payload);%0A%09%0A%09%09%09Cipher c = Cipher.getInstance(%22AES/CBC/PKCS5Padding%22, %22BC%22);%0A%09%0A%09%09%09// Remove OpenSSL Salted_%0A%09%09%09byte%5B%5D salt = new byte%5B8%5D;%0A%09%09%09System.arraycopy(encrypted, 8, salt, 0, 8);%0A%09%09%09%0A%09%09%09SecretKeyFactory fact = SecretKeyFactory.getInstance(%22PBEWITHMD5AND128BITAES-CBC-OPENSSL%22, %22BC%22);%0A%09%09%09c.init(Cipher.DECRYPT_MODE, fact.generateSecret(new PBEKeySpec(key.toCharArray(), salt, 100)));%0A%09%0A%09%09%09// Decrypt the rest of the byte array (after stripping off the salt)%0A%09%09%09byte%5B%5D data = c.doFinal(encrypted, 16, encrypted.length-16);%0A%09%09%09String decrypted = new String(data, %22utf8%22); %0A%09%09%09return decrypted.substring(0, decrypted.length() - 1); // trim out trailing %5Cn%0A%09%09%09%0A%09%09%7D catch (Exception e) %7B%0A%09%09%09e.printStackTrace();%0A%09%09%09Log.e(TAG, %22Unable to decrypt data%22, e);%0A%09%09%7D%0A%09%09return null;%0A%09%7D%0A%0A%09private static byte%5B%5D base64ToBytes(String key) %7B%0A%09%09return Base64.decode(key, Base64.DEFAULT);%0A%09%7D%0A%7D%0A

Test project, working OpenSSL Aes decryption