private String decryptServicesDotXml() throws Exception { byte[] encryptedData = null; String decryptedString = null; // retrieve the key long timestamp = System.currentTimeMillis(); timestamp -= timestamp % timestampMod; URL url = new URL( String.format( "http://services.appmobi.com/external/clientservices.aspx?feed=OA&appname=%s×tamp=%d", activity.configData.appName, timestamp)); InputStream in = url.openConnection().getInputStream(); ByteArrayOutputStream keyStream = new ByteArrayOutputStream(); FileUtils.copyInputStream(in, keyStream); in.close(); byte[] keyBytes = new byte[24], keyStreamBytes = keyStream.toByteArray(); String keyMark = "key=\""; System.arraycopy( keyStreamBytes, (new String(keyStreamBytes).indexOf(keyMark) + keyMark.length()), keyBytes, 0, keyBytes.length); keyStream.close(); // read the encrypted data from file into byte[] File servicesDotXml = new File(activity.baseDir(), "services.xml"); InputStream is = new FileInputStream(servicesDotXml); long length = servicesDotXml.length(); encryptedData = new byte[(int) length]; int offset = 0, numRead = 0; while (offset < encryptedData.length && (numRead = is.read(encryptedData, offset, encryptedData.length - offset)) >= 0) { offset += numRead; } is.close(); // set up crypto objects final SecretKey key = new SecretKeySpec(keyBytes, "DESede"); final Cipher decipher = Cipher.getInstance("DESede/ECB/NoPadding"); decipher.init(Cipher.DECRYPT_MODE, key); // decrypt data and return string final byte[] plainText = decipher.doFinal(encryptedData); decryptedString = new String(plainText, "UTF-8"); return decryptedString; }