Невозможно декодировать зашифрованный текст, используя Java, но отлично работает с JS - PullRequest
0 голосов
/ 29 января 2020

У меня есть следующий код дешифрования в 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;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...