package tools; public class MapleCustomEncryption { public static final byte[] encryptData(byte[] data) { for (int j = 0; j < 6; j++) { byte remember = 0; byte dataLength = (byte) (data.length & 0xFF); if (j % 2 == 0) { for (int i = 0; i < data.length; i++) { byte cur = data[i]; cur = BitTools.rollLeft(cur, 3); cur = (byte) (cur + dataLength); cur = (byte) (cur ^ remember); remember = cur; cur = BitTools.rollRight(cur, dataLength & 0xFF); cur = (byte) ((cur ^ 0xFFFFFFFF) & 0xFF); cur = (byte) (cur + 72); dataLength = (byte) (dataLength - 1); data[i] = cur; } } else { for (int i = data.length - 1; i >= 0; i--) { byte cur = data[i]; cur = BitTools.rollLeft(cur, 4); cur = (byte) (cur + dataLength); cur = (byte) (cur ^ remember); remember = cur; cur = (byte) (cur ^ 0x13); cur = BitTools.rollRight(cur, 3); dataLength = (byte) (dataLength - 1); data[i] = cur; } } } return data; } public static final byte[] decryptData(byte[] data) { for (int j = 1; j <= 6; j++) { byte remember = 0; byte dataLength = (byte) (data.length & 0xFF); byte nextRemember = 0; if (j % 2 == 0) { for (int i = 0; i < data.length; i++) { byte cur = data[i]; cur = (byte) (cur - 72); cur = (byte) ((cur ^ 0xFFFFFFFF) & 0xFF); cur = BitTools.rollLeft(cur, dataLength & 0xFF); nextRemember = cur; cur = (byte) (cur ^ remember); remember = nextRemember; cur = (byte) (cur - dataLength); cur = BitTools.rollRight(cur, 3); data[i] = cur; dataLength = (byte) (dataLength - 1); } } else { for (int i = data.length - 1; i >= 0; i--) { byte cur = data[i]; cur = BitTools.rollLeft(cur, 3); cur = (byte) (cur ^ 0x13); nextRemember = cur; cur = (byte) (cur ^ remember); remember = nextRemember; cur = (byte) (cur - dataLength); cur = BitTools.rollRight(cur, 4); data[i] = cur; dataLength = (byte) (dataLength - 1); } } } return data; } }