У меня есть следующий код дешифрования в javascript, который отлично работает
function decodeResponse(result) {
var keyBytes = CryptoJS.enc.Base64.parse("ITU2NjNhI0tOc2FmZExOTQ==");
console.log(keyBytes);
var ivBytes = CryptoJS.enc.Base64.parse('AAAAAAAAAAAAAAAAAAAAAA==');
console.log(ivBytes);
var bytes = CryptoJS.AES.decrypt(result, keyBytes, {iv: ivBytes}, {mode: CryptoJS.mode.CBC});
var plaintext = bytes.toString(CryptoJS.enc.Utf8);
s = plaintext;
try {
obj = JSON.parse(s);
} catch(e) {
return null;
}
return obj;
}
var encrypted = 'X8wlXtx9NcXWWI2WXivdA72Dht6Ei9XN8pkAoeBV7tNgtZLxbZA23B4iKPG0Pfd5ny1NCHtkpi5lLLN4weT2zbqb3vyfSLaBpFt+3Cp0aiJbXLJsrU0SZmgKT4d3n1DMcgYzcXRHeUqToiSsNcf4qXWAcNOTKkxU0s96QenOi6UOsYF\/P72M4IlPUEbhM2K0';
<span class="math-container">$('#decoded').text(JSON.stringify(decodeResponse(encrypted)));
$</span>('#rest-response').text(encrypted);
Но если я попробую то же самое в java, я не смогу правильно расшифровать
Вкл. кажется, что обе поверхности используют одни и те же алгоритмы, но я не могу заставить его работать в мире java. Я довольно нуб, когда дело доходит до шифрования. Может кто-нибудь помочь мне понять, где я ошибся
private static final byte[] CRYPT_DECODE_IV = Base64.getDecoder().decode("AAAAAAAAAAAAAAAAAAAAAA==");
private static final byte[] CRYPT_DECODE_KEY = Base64.getDecoder().decode("ITU2NjNhI0tOc2FmZExOTQ==");
public static void main(String[] args) throws Exception {
System.out.println(new String(decodedBytes, StandardCharsets.UTF_8));
}
public static byte[] decodeRestResponse(byte[] encryptedBytes, byte[] cryptKey, byte[] cryptIv) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
ByteArrayInputStream byteInputStream;
SecretKey skey = new SecretKeySpec(cryptKey, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(DECRYPT_MODE, skey, new IvParameterSpec(cryptIv));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bos.write(cipher.doFinal(encryptedBytes));
byteInputStream = new ByteArrayInputStream(bos.toByteArray());
final byte[] decodedBytes = new byte[bos.size()];
byteInputStream.read(decodedBytes);
return decodedBytes;
}