Exemple #1
0
  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&timestamp=%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;
  }