/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.nio.charset.StandardCharsets;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
SecretKeySpec secretKeySpec = new SecretKeySpec(new byte[]{45, 82, 35, 42, 114, 69, 104, 97, 83, 65, 112, 53, 55, 68, 97, 115}, "AES");
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
byte[] decode = Base64.getDecoder().decode(str.getBytes(StandardCharsets.UTF_8));
byte[] copyOfRange
= Arrays.
copyOfRange(decode,
0,
16); byte[] copyOfRange2
= Arrays.
copyOfRange(decode,
16, decode.
length); cipher.init(2, secretKeySpec, new IvParameterSpec(copyOfRange));
return new String(cipher.
doFinal(copyOfRange2
), StandardCharsets.
UTF_8); return str;
}
}
{
// your code goes here
String output
= decrypt
("4BYlrCNPJZncIACG4mayRywzFfnQhMVCWp4dgGhmF0eAQ7trwjAB1fNz210nuxnGvk4Ctaqlv7TsaIoIbw+lSGPwOxBGGb4Yi6LsQ3mG7TlnT4CSKDKs7sMTImSh4cI9Vuo8i/yXxEIozZB2KhhbsnLrWSxahh4FIMCb7TDDGHo="); System.
out.
println("Decoded: " + output
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CmltcG9ydCBqYXZheC5jcnlwdG8uQ2lwaGVyOwppbXBvcnQgamF2YXguY3J5cHRvLnNwZWMuSXZQYXJhbWV0ZXJTcGVjOwppbXBvcnQgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYzsKaW1wb3J0IGphdmEudXRpbC5CYXNlNjQ7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoJICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGRlY3J5cHQoU3RyaW5nIHN0cikgewogICAgICAgIFNlY3JldEtleVNwZWMgc2VjcmV0S2V5U3BlYyA9IG5ldyBTZWNyZXRLZXlTcGVjKG5ldyBieXRlW117NDUsIDgyLCAzNSwgNDIsIDExNCwgNjksIDEwNCwgOTcsIDgzLCA2NSwgMTEyLCA1MywgNTUsIDY4LCA5NywgMTE1fSwgIkFFUyIpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIENpcGhlciBjaXBoZXIgPSBDaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUy9DQkMvUEtDUzdQYWRkaW5nIik7CiAgICAgICAgICAgIGJ5dGVbXSBkZWNvZGUgPSBCYXNlNjQuZ2V0RGVjb2RlcigpLmRlY29kZShzdHIuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpOwogICAgICAgICAgICBieXRlW10gY29weU9mUmFuZ2UgPSBBcnJheXMuY29weU9mUmFuZ2UoZGVjb2RlLCAwLCAxNik7CiAgICAgICAgICAgIGJ5dGVbXSBjb3B5T2ZSYW5nZTIgPSBBcnJheXMuY29weU9mUmFuZ2UoZGVjb2RlLCAxNiwgZGVjb2RlLmxlbmd0aCk7CiAgICAgICAgICAgIGNpcGhlci5pbml0KDIsIHNlY3JldEtleVNwZWMsIG5ldyBJdlBhcmFtZXRlclNwZWMoY29weU9mUmFuZ2UpKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoY2lwaGVyLmRvRmluYWwoY29weU9mUmFuZ2UyKSwgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCk7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIHVudXNlZCkgewogICAgICAgICAgICByZXR1cm4gc3RyOwogICAgICAgIH0KICAgIH0KCgoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCVN0cmluZyBvdXRwdXQgPSBkZWNyeXB0KCI0QllsckNOUEpabmNJQUNHNG1heVJ5d3pGZm5RaE1WQ1dwNGRnR2htRjBlQVE3dHJ3akFCMWZOejIxMG51eG5Hdms0Q3RhcWx2N1RzYUlvSWJ3K2xTR1B3T3hCR0diNFlpNkxzUTNtRzdUbG5UNENTS0RLczdzTVRJbVNoNGNJOVZ1bzhpL3lYeEVJb3paQjJLaGhic25McldTeGFoaDRGSU1DYjdURERHSG89Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJEZWNvZGVkOiAiICsgb3V0cHV0KTsKCX0KfQ==