package czd.lib.encode; import java.util.Random; /** * @author Chen.Zhidong * 2011-12-21 */ public class Reversible { public static String encode(String toencode, String key) { String encrypt_key = MD5.encode(((int)(new Random().nextDouble() * 32000) + "").getBytes(), false); int ctr = 0; StringBuilder result = new StringBuilder(); int len = toencode.length(); for (int i = 0; i < len; i++) { ctr = (ctr == encrypt_key.length() ? 0 : ctr); result.append(encrypt_key.charAt(ctr)); result.append((char)(toencode.charAt(i) ^ encrypt_key.charAt(ctr++))); } return Base64.encode(Reversible.passKey(result.toString(), key).getBytes()); } public static String decode(String todecode, String key) { String txt = Reversible.passKey(new String(Base64.decode(todecode.getBytes())), key); StringBuilder result = new StringBuilder(); int len = txt.length(); for (int i = 0; i < len; i++) { result.append((char)(txt.charAt(i) ^ txt.charAt(++i))); } return result.toString(); } private static String passKey(String text, String key) { String encrypt_key = MD5.encode(key.getBytes(), false); int ctr = 0; StringBuilder result = new StringBuilder(); int len = text.length(); for (int i = 0; i < len; i++) { ctr = (ctr == encrypt_key.length() ? 0 : ctr); result.append((char)(text.charAt(i) ^ encrypt_key.charAt(ctr++))); } return result.toString(); } }