package com.ant; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class DecodingClass { //String header = "package com.android.m;\nimport android.content.Context;\npublic class M { \n"; //String dec = " public static String d(byte[] ebytes, byte[] obytes){\n for (int i = 0; i < obytes.length; i++) {\n ebytes[i] = (byte) (ebytes[i] ^ obytes[i]);\n }\n return new String(ebytes);\n }\n\n"; //String h2b = " public static byte[] h2b(final String s) {\n final byte[] b = new byte[s.length() / 2];\n for (int i = 0; i < b.length; i++) {\n final int index = i * 2;\n final int v = Integer.parseInt(s.substring(index, index + 2), 16);\n b[i] = (byte) v;\n }\n return b;\n }\n"; FileOutputStream fout; public DecodingClass(String filename, String headerFile) { File classFile = new File(filename); classFile.getParentFile().mkdirs(); try { FileInputStream fin = new FileInputStream(headerFile); String mIn = new String(inputStreamToBuffer(fin, 0)); if(mIn.endsWith("\n}\n")){ mIn=mIn.substring(0, mIn.length() -2); } if(mIn.endsWith("\n}\r\n")){ mIn=mIn.substring(0, mIn.length() -3); } if(mIn.endsWith("\n}")){ mIn=mIn.substring(0, mIn.length() -1); } fout = new FileOutputStream(classFile); fout.write(mIn.getBytes()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void append(String method, byte[] ebytes, byte[] kbytes) { try { String m1 = " public static String " + method +"(String enc){\n"; String m2 = " return d(h2b(enc),h2b(\"KY" + Utils.byteArrayToHexString(kbytes) + "\" ));\n }\n"; fout.write(m1.getBytes()); fout.write(m2.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void close() { try { fout.write("}\n".getBytes()); fout.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static final byte[] inputStreamToBuffer(final InputStream iStream, final int offset) { try { int i; final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(1024); byte[] buffer = new byte[1024]; if (offset > 0) { byte[] discard = new byte[offset]; iStream.read(discard); discard = null; } while ((i = iStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, 0, i); } iStream.close(); return byteArrayOutputStream.toByteArray(); } catch (final IOException e) { e.printStackTrace(); return null; } } }