import
javax.crypto.Cipher;
import
javax.crypto.spec.IvParameterSpec;
import
javax.crypto.spec.SecretKeySpec;
import
javax.crypto.BadPaddingException;
import
javax.crypto.IllegalBlockSizeException;
import
javax.crypto.NoSuchPaddingException;
import
java.security.InvalidAlgorithmParameterException;
import
java.security.InvalidKeyException;
import
java.security.NoSuchAlgorithmException;
import
java.util.ArrayList;
import
java.util.List;
import
java.util.regex.Matcher;
import
java.util.regex.Pattern;
public
class
DecryptExample {
public
static
void
main(String[] args) {
try
{
byte
[] rawKey = {
82
,
114
,
118
,
51
,
113
,
70
,
108
,
86
,
73
,
69
,
73
,
110
,
111
,
111
,
99
,
119
};
byte
[] iv = {
49
,
106
,
104
,
49
,
57
,
78
,
70
,
106
,
79
,
116
,
102
,
119
,
84
,
75
,
73
,
113
};
String encryptedStr =
"e4cbd62f573b7cbb405ec661ab50f9ed3c374c8dfa212251062a2c51ce5d00fa8fc0388631d20e49c71c75ceeb5c494bca4fe0dbadb841302cb35f840635c574a643e2c7ea2a3d601348bb71060b312b9e88745a251f896a0a2712bb9e4f53cadef48230b24e284827f025eea483a42eab331e6920b0f53317ec90a50b11335ac08940e25a42bf60d86d1674a63b204676e20e55f75993a163fc43353446ec9b9db227d3368e26152bc586bd2500c577f2ace8eb184cf95c64121ae6b540c4bc88d15df021798fe9d79b90b097e8c6b3967a21a763c50aecc144981d00f9e9fdf991d01b64d84fe1672c4a8894c7dbb72c1b927e98f99c6d0b7d9d633d76cf596a928f0e199840b0829cf68bc39f8ea6d139fd5fe83d9bcc7a5703f957f637b638701414e5b2562c5af7d82c41e12ff1a6782c5728e692fae7f7083a80d9df519cb8ee75d2a114fd626927d3b968ba0f35636fa53cdfad0556929afe63ffb50b1277f5d177a6e4a50a809cb2a45553561b92f6aa782835b9a9ed392c301ed9b6171165b64a8437b6c40086a08223afa8dc7af59099068b052214dc3b892dff2d9002f8077df8e062bdc314551d06d3adcb392756507f99a22cd3979697ff654882d48a2d5699b94bdb420d5dc00726e06082e0aa2e4ea5fea8235127c4f428ec0d26ad3bdf065e8f42464753718c7b8725af2fd8287b53abe4b0539a1cecc312279ee4042360695bd4dbefce33a9464cc9a4718f77f606bd3ec9e6868e0f7ccc8c836841bc377cabd232398ce2ff99770247fdd08bf145312eb5b14bd81a0d960e73cb3521c0ac3d6317c9e216fec5c3ca087b500f7145498f5e49c5cdfb28b3b55ad75588526d0d7554f5b0158130c526fbdb90e97c34c185e0998b329dcf515f7b36098f85dd3bc3106efe4febcb43bd469fae16ef86eb88e83835b4dab0159273f34f11619db4a1cb32b8855eb90c69da2d733a9c03a16209e652a9f9b6cfb16f7df295ef3703b3d55e6c1c78526a396281218084396e08cfbd42056131df8bbe5f192e0a2a969efe7b837ffa57580618805351e9cf30583edaca1dc70aee30b794174a9495c9db5b173ff26cc166c1308e1e2bcbab6faabaa7962370589cf791156bcd6d78c972b6668c689f42afd1fd8674549823b04e2339fe5e78063e49ae9cb3642bdc35b98153626247b9a9c141dbfe5fbedd2fbb79825eb0f239b0edbba66affa59440a3b794915961cfd25d5b861ab67ca1b77e4878c42d8e1007da0d12ff006dcca51ced022b87fd4c31949dbf6ca58b0c51567feb4b8e9467c94672c4ed3749331d924103fa30efa58788911bcc7d066ff3fabb083bc468d06eb0081cefa247ecda4d1cb3e3f18fe85a19a26e48a632334878b811b78b0033f72c0450bc09179814adcb387fc12304b7b24dac27d5c4268f9af8ea96817c2c1394a959379d39ac3c216299f5ccd60a3cc40f259190702ea5d7ca49fde77236dbf8681dda009221ee2b36708cfe68cad7b5a2aa0edaae9fbe810a8ba557e0d72e222dddcfe085ba74b03adf307f064d36af5e8046059303fb6a19f1d21e0af488301095eb8e873ca8c4e6a97d6257ed04b4355c7e29f47b124bf2b54d29bcfe7e75414ceca6306eceff6d6d6f8ed319756531937c2e5297cd1eb1dc0d0be905ab8227c2dfcaa82f0bbe19cf278e07299fca4f302126950b84085c37789c070776e9af85ad837c2040bd20fa89284a72cb2f1358dae1fd1f03d422d35adcfa041ded739acb9b912513c0a441a479e6e9df8796f4044333e63bdf4e29ff1d5204e9cf66047980a50b97fd131adbac60c5a2c114e5d69eb937388f8432d416d7bd4518187e9f91e1dbcae479bf4f5a0b661c3838957d7110f69938f3f5c155ee3196c5c8d594e24c0c2be68df3cab5b34f28d6f3ff9e3c78c8e7dbc21d181fca3b24fcf9006bf8f7e5e798a2df3e3455d9274ef07e5dc94be331479ae3988812acc8d3b3383bb891d8a672ea1857c4ac4095dd4ab8ca3f08967e9bca3e0976afae1c5580a70486f81918bb82d2638253dbbfd9b1987969ffdda42b565f3451e58a69253777c449cb9d7777d4fefdcd52fed5dfac9b138e8b1f9fe091b4fdf21bcda328b9e0f7928196b98145d85f040da0095d13447df78d4f178cd62d391533db21211d8c1a07b173be846e0460cf6da93d8e46b403c85d1690a03dd6286df4bc5cfcb9998b816022c75c531fb89e5500466aa9ed211c7d435f216e0cd45daaf56e8715b6d4f9d2f500346315be67f54c953b6027264f91cff35be110322b9718afb14c3cf4a25aeaf38fed64111fa33608eb7aca11704dd2304908bc3df850181799e793cc6a0074718f14c57c5b8730a5010f45e48c6a881f8e0e3efd975c57e2f3bc6548521ccbd823399979ffd064a040b702bcd90bb6fcc45b9ca7fa518ec0bc5bd9d570b333472dd87221cac00a87d23275c800cb6ce08c5ee10f9020f9821a0ef472dba774410a5bf2ced6c8bcc5f9ad37ca82322a595d3f7da752e7a38ff24f12a70729b7d01a90c3ebc24698ae32f7ae162f034d7f042efe6237caa582f5a5ba2759f8b37db439b913db09609caae69e9ae2f28e449f1716e7f3111feb17cf6af781845bb61a9be89f8637dfe37b567735103930051152c329b7d12f705e7c5f8422f304d5d14959a77c64e5559df552b904538865952c04f4aa3f31d8b5d71430e6d1b6ea18ddc363f59c4df7b2fc6f43ffd7621c36a410ae2f3166b5f54eb0dd787f72855aad134e21fc1fc92cb7d93d7bfff05045d469b092f168127e93c10094aa70edabd640f44553415d5aeb8d0a69b2a1c213dca235d5054a469bb25f25db4659bdba0f2d73fa6af0bf8f1d42863c592f214c851115c179f6449a8d9437b1c26b01c3e64938539d84342fc1f7607daa3cb21218cbe2a0394c9622091880a61b13f278b6269153a5d4d5e78d9b030933aeeab7742ab4129c93ed970eb822ad35ac7204bd13e9b3526b081a9c4c6a10481bcd02f8e1f16c789670c175cf3ace050d68a3dec7e9c971ff0cfefed18f7ef58f70293d9444f39c9fdb314c0dc379c0f815382df9dcf71f5867409d18d7e7ecf490c89913ef9bc4decc4278d8087295004830b3a26319c42b9b047561a12064879e91aeaa2785639ac10fd916135dc49b875ecf9d09136c492f7f22ba2ed44df0892a170f05f2337592144e37fde780d29a6917d21499c9fa668735d908716e621edf5c6db9eaad5a83aef8f04bcc2130b7c71e4714a3d2739a8b9ace4c0a37a0dcf38d127d14b508ee3220e6016cd2f0db611d28cfd6def6d02b92c041a8765d67e30db07ab1912675d3a1444a8fe317acc4d94e10fa8135f96042f0ce043fbee0cd94a689e39db4896f63c9688645e1ea652983ad907cc4550aca907e76013fd79b712c4e70b891e05969a78e94184e8eff5f719335cce24e45e059a660d1b3609ee67cf0231b59a5caf7895376459b9cda0cb7a7f9686f7e68130a58b83b6cd8185e83142fb6dae69e900819f39e0eeb7af54fe5eadf44dade658d05059e74539b3adc27b5eb879e6af72aaef527f6dfb3e52689b76f6605d0b74dc11fcd7641023cff5298a949d1b22677817a80e381e0e71579a335dbae3158d99f6499a1c8168d3841626de30ceaf7bc6f96ff268f3896b3d7954c26a9f819495803f767c782a0ab0774e4ceae8abeb7583d42d44507e74a6986bc6597219b4228563943ce2c86c59b260cea14c7fa29c699262852c795d307fedad268a0c4bdc9a96a51f8dff7e7c32fa5c6bb1f5bdcadba53bf16208fdc0ba4ef5a4f964a9a7b1195873b166a28629e40339d46e0192dbff36711cd9884c9e2928399819fe4f2c6a1196d8fe7888496146a91b02e056c9adc6325b9fc10f523bb57a0858b1e5bc568117624309e12fcaec519a68b862112030a8b7f140ff6df39e41741acbf9b75e94b520ad191a23f2916295a98caa767d4cb6364947c176d599601ce362fbe840f87816395f71965b2ef41ad93e37a433666dd2ebc1688d424154eadbd932eaeeafaa5de06fd928475aa057bde7c0430175ffe1a20f677e682b8974dc4ef5300775b71d311baa648047120d4d76c0dd0a54b2973b253ee44c9ff2584ddc92b734f40dfd32e33064c2deb125f0c4a9a66853367a665cd344406418b3ac46963d6b92166d6782a5c8e4535133d83693fc2992101ff7de61dc5be1a9db36be0b57f18b5625bbb250a78b918e00b3dd6427cf4a4dbcbaa06019dcf1cbe0f6c02b763fdabd7d19995140240ffa63bb8f704a14df1b5cbcc3e860f3b6aeff52cd525eb3766bd1c2c788c3b429af602d4f38383af3782b3f8fc7b7c96d3696166144897fe63c0919c41b7970f4d766637d5ad340b2eb126bd00133c9b9ea4aef8eaae3ed6ead9bd4230da01eb0350be297676806bf91cc68c43c3e1149dc604710fd0dac263752e5a8982d66f4cb695cd45c566e7972ef3ec8c4bf2730020546f4de155e2f2b4e8d42c7ac8723ad6140f7fea3ba1ab8746a0c596ee29794a4b3452f641d8c6b321cb5f08485de6a377e5e733eb25c1aef13c075787b79626afb21d976807ae51462b41ff4f1f2bbac56280dfd9c41d54c8307da10371a4e41495f50c87fedd8eaa2fd806d92eac49d4ed372e0f8cc9bf70ded15d5957d0a584716bf5a3cc517cf1d5c562a05ade85d3ecc95727538e1c2952bbc69c8203f5502e0c2353d1661c5486c9d73f78860cabe0faaf7bac93c3e226af42e4e94f9fdf154c9fd9b380f1b2b783d2bdc5a31c7f1e4e4ee087de8c93dc66ddf2e280f31bb6a405f4b86f7f3a30"
;
byte
[] encryptedData = convertToByteArray(encryptedStr);
String decrypted = encrypt(encryptedData, rawKey, iv);
System.out.println(
"Decrypted: "
+ decrypted);
}
catch
(Exception e) {
e.printStackTrace();
}
}
public
static
String encrypt(
byte
[] encryptedData,
byte
[] key,
byte
[] iv)
throws
NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
SecretKeySpec secretKeySpec =
new
SecretKeySpec(key,
"AES"
);
IvParameterSpec ivParameterSpec =
new
IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance(
"AES/CBC/PKCS5Padding"
);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte
[] decryptedBytes = cipher.doFinal(encryptedData);
return
new
String(decryptedBytes);
}
public
static
byte
[] convertToByteArray(String encrypted) {
Pattern pattern = Pattern.compile(
".{1,2}"
);
Matcher matcher = pattern.matcher(encrypted);
List<String> matches =
new
ArrayList<>();
while
(matcher.find()) {
matches.add(matcher.group());
}
byte
[] result =
new
byte
[matches.size()];
for
(
int
i =
0
; i < matches.size(); i++) {
String hex = matches.get(i);
result[i] = (
byte
) Integer.parseInt(hex,
16
);
}
return
result;
}