import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.spec.KeySpec;
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone {
private static final String SECRET_KEY
= "my_super_secret_key"; private static final String SALT
= "ssshhhhhhhhhhh!!!!";
try {
byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
IvParameterSpec ivspec = new IvParameterSpec(iv);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec
= new PBEKeySpec
(SECRET_KEY.
toCharArray(), SALT.
getBytes(),
65536,
256); SecretKey tmp = factory.generateSecret(spec);
SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
return Base64.getEncoder()
.encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8)));
System.
out.
println("Error while encrypting: " + e.
toString()); }
return null;
}
try {
byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
IvParameterSpec ivspec = new IvParameterSpec(iv);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec
= new PBEKeySpec
(SECRET_KEY.
toCharArray(), SALT.
getBytes(),
65536,
256); SecretKey tmp = factory.generateSecret(spec);
SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);
return new String(cipher.
doFinal(Base64.
getDecoder().
decode(strToDecrypt
))); System.
out.
println("Error while decrypting: " + e.
toString()); }
return null;
}
public static void main
(String[] args
) { String originalString
= "howtodoinjava.com";
String encryptedString
= Ideone.
encrypt(originalString
); String decryptedString
= Ideone.
decrypt(encryptedString
);
System.
out.
println(originalString
); System.
out.
println(encryptedString
); System.
out.
println(decryptedString
); }
}
aW1wb3J0IGphdmF4LmNyeXB0by5DaXBoZXI7CmltcG9ydCBqYXZheC5jcnlwdG8uU2VjcmV0S2V5OwppbXBvcnQgamF2YXguY3J5cHRvLlNlY3JldEtleUZhY3Rvcnk7CmltcG9ydCBqYXZheC5jcnlwdG8uc3BlYy5JdlBhcmFtZXRlclNwZWM7CmltcG9ydCBqYXZheC5jcnlwdG8uc3BlYy5QQkVLZXlTcGVjOwppbXBvcnQgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYzsKaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKaW1wb3J0IGphdmEuc2VjdXJpdHkuc3BlYy5LZXlTcGVjOwppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKIApjbGFzcyBJZGVvbmUgewogIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRUNSRVRfS0VZID0gIm15X3N1cGVyX3NlY3JldF9rZXkiOwogIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQUxUID0gInNzc2hoaGhoaGhoaGhoISEhISI7CiAKICBwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNyeXB0KFN0cmluZyBzdHJUb0VuY3J5cHQpIHsKICAgIHRyeSB7CiAgICAgIGJ5dGVbXSBpdiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKICAgICAgSXZQYXJhbWV0ZXJTcGVjIGl2c3BlYyA9IG5ldyBJdlBhcmFtZXRlclNwZWMoaXYpOwogCiAgICAgIFNlY3JldEtleUZhY3RvcnkgZmFjdG9yeSA9IFNlY3JldEtleUZhY3RvcnkuZ2V0SW5zdGFuY2UoIlBCS0RGMldpdGhIbWFjU0hBMjU2Iik7CiAgICAgIEtleVNwZWMgc3BlYyA9IG5ldyBQQkVLZXlTcGVjKFNFQ1JFVF9LRVkudG9DaGFyQXJyYXkoKSwgU0FMVC5nZXRCeXRlcygpLCA2NTUzNiwgMjU2KTsKICAgICAgU2VjcmV0S2V5IHRtcCA9IGZhY3RvcnkuZ2VuZXJhdGVTZWNyZXQoc3BlYyk7CiAgICAgIFNlY3JldEtleVNwZWMgc2VjcmV0S2V5ID0gbmV3IFNlY3JldEtleVNwZWModG1wLmdldEVuY29kZWQoKSwgIkFFUyIpOwogCiAgICAgIENpcGhlciBjaXBoZXIgPSBDaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUy9DQkMvUEtDUzVQYWRkaW5nIik7CiAgICAgIGNpcGhlci5pbml0KENpcGhlci5FTkNSWVBUX01PREUsIHNlY3JldEtleSwgaXZzcGVjKTsKICAgICAgcmV0dXJuIEJhc2U2NC5nZXRFbmNvZGVyKCkKICAgICAgICAgIC5lbmNvZGVUb1N0cmluZyhjaXBoZXIuZG9GaW5hbChzdHJUb0VuY3J5cHQuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpKTsKICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igd2hpbGUgZW5jcnlwdGluZzogIiArIGUudG9TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgCiAgcHVibGljIHN0YXRpYyBTdHJpbmcgZGVjcnlwdChTdHJpbmcgc3RyVG9EZWNyeXB0KSB7CiAgICB0cnkgewogICAgICBieXRlW10gaXYgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CiAgICAgIEl2UGFyYW1ldGVyU3BlYyBpdnNwZWMgPSBuZXcgSXZQYXJhbWV0ZXJTcGVjKGl2KTsKIAogICAgICBTZWNyZXRLZXlGYWN0b3J5IGZhY3RvcnkgPSBTZWNyZXRLZXlGYWN0b3J5LmdldEluc3RhbmNlKCJQQktERjJXaXRoSG1hY1NIQTI1NiIpOwogICAgICBLZXlTcGVjIHNwZWMgPSBuZXcgUEJFS2V5U3BlYyhTRUNSRVRfS0VZLnRvQ2hhckFycmF5KCksIFNBTFQuZ2V0Qnl0ZXMoKSwgNjU1MzYsIDI1Nik7CiAgICAgIFNlY3JldEtleSB0bXAgPSBmYWN0b3J5LmdlbmVyYXRlU2VjcmV0KHNwZWMpOwogICAgICBTZWNyZXRLZXlTcGVjIHNlY3JldEtleSA9IG5ldyBTZWNyZXRLZXlTcGVjKHRtcC5nZXRFbmNvZGVkKCksICJBRVMiKTsKIAogICAgICBDaXBoZXIgY2lwaGVyID0gQ2lwaGVyLmdldEluc3RhbmNlKCJBRVMvQ0JDL1BLQ1M1UEFERElORyIpOwogICAgICBjaXBoZXIuaW5pdChDaXBoZXIuREVDUllQVF9NT0RFLCBzZWNyZXRLZXksIGl2c3BlYyk7CiAgICAgIHJldHVybiBuZXcgU3RyaW5nKGNpcGhlci5kb0ZpbmFsKEJhc2U2NC5nZXREZWNvZGVyKCkuZGVjb2RlKHN0clRvRGVjcnlwdCkpKTsKICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igd2hpbGUgZGVjcnlwdGluZzogIiArIGUudG9TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gImhvd3RvZG9pbmphdmEuY29tIjsKIAogICAgU3RyaW5nIGVuY3J5cHRlZFN0cmluZyA9IElkZW9uZS5lbmNyeXB0KG9yaWdpbmFsU3RyaW5nKTsKICAgIFN0cmluZyBkZWNyeXB0ZWRTdHJpbmcgPSBJZGVvbmUuZGVjcnlwdChlbmNyeXB0ZWRTdHJpbmcpOwogCiAgICBTeXN0ZW0ub3V0LnByaW50bG4ob3JpZ2luYWxTdHJpbmcpOwogICAgU3lzdGVtLm91dC5wcmludGxuKGVuY3J5cHRlZFN0cmluZyk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGVjcnlwdGVkU3RyaW5nKTsKICB9Cgp9Cg==