This guide shows how to implement secure decryption using AES, XOR, and Base64.
The decode order is: Base64 â XOR â AES Decrypt â UTF-8
private static String getAESKey() {
return "your-16-byte-key";
}
private static String getAESIV() {
return "your-16-byte-iv";
}
private static byte[] getXORKey() {
return new byte[]{0x1A, 0x2B, 0x3C, 0x4D};
}
private String decode(String input) {
try {
byte[] base64 = Base64.decode(input, Base64.NO_WRAP);
byte[] xored = xor(base64);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(getAESKey().getBytes(StandardCharsets.UTF_8), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(getAESIV().getBytes(StandardCharsets.UTF_8));
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] decrypted = cipher.doFinal(xored);
return new String(decrypted, StandardCharsets.UTF_8);
} catch (Exception e) {
return "";
}
}
private byte[] xor(byte[] data) {
byte[] key = getXORKey();
byte[] result = new byte[data.length];
for (int i = 0; i < data.length; i++) {
result[i] = (byte)(data[i] ^ key[i % key.length]);
}
return result;
}
from Crypto.Cipher import AES
import base64
def xor(data, key):
return bytes([b ^ key[i % len(key)] for i, b in enumerate(data)])
def encode(plaintext, aes_key, aes_iv, xor_key):
cipher = AES.new(aes_key.encode(), AES.MODE_CBC, aes_iv.encode())
pad_len = 16 - len(plaintext) % 16
padded = plaintext + chr(pad_len) * pad_len
encrypted = cipher.encrypt(padded.encode())
xored = xor(encrypted, xor_key)
return base64.b64encode(xored).decode()
# Example usage
print(encode("HelloWorld", "k9D2!7aL4#oXf2Qb", "Q8b@3nL6rV1eZ0pT", bytes([0x5A, 0x2D, 0x6F, 0x1C])))
public String a = decode("Base64EncodedString1==");
public String b = decode("Base64EncodedString2==");