package x; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Encrypt Strings in Java files. This is done by replacing any occurance * of "text" with x.Strings.dec("enodedText") * */ public class StringEncryptor { public static void main(String[] args) throws Exception { // System.out.println("text"); // System.out.println(x.Strings.enc("text")); // System.out.println(x.Strings.dec("ufyu")); // encodeFile(args[0],args[1]); // System.out.println(x.Strings.dec("ufyu")+2+x.Strings.dec("Qfufs")); // System.out.println(encodedContents("System.out.println(\"text\"+2+\"Peter\")")); // } public static void encodeFile(String input, String output) throws Exception { byte[] bytes = new byte[128*1024]; // large enough FileInputStream in = new FileInputStream(input); int bytesRead = in.read(bytes); in.close(); String content = new String(bytes,0,bytesRead,"ISO8859-1"); content = encodedContents(content); bytes = content.getBytes("ISO8859-1"); FileOutputStream fout = new FileOutputStream(output); fout.write(bytes); fout.close(); } public static String encodedContents(String contents) { Pattern p = Pattern.compile("\"[^\"]+\""); Matcher m = p.matcher(contents); int delta = 0; while( m.find() ) { System.out.println("encoding string "+ m.start()+" "+m.end()); String start = contents.substring(0,m.start()+delta); String text = contents.substring(m.start()+delta+1,m.end()+delta-1); String end = contents.substring(m.end()+delta); if( !"all".equals(text) && !"unused".equals(text) ) { // Annotations contents = start + "x.Strings.dec(\""+Strings.enc(text)+"\")" + end; delta += 15; } } return contents; } } .