Проблема с шифрованием AES в JavaScript и расшифровывать в Java - PullRequest
1 голос
/ 03 июля 2019

Я хочу зашифровать и расшифровать «ABCD1234» в AES, но вывод не тот.Что я должен сделать, чтобы получить те же результаты?

зашифровать в crypto-js

function encrypt(string) {
  const key = CryptoJS.enc.Utf8.parse("g@eNR@2H'9n/ZF8s");
  const encrypted = CryptoJS.AES.encrypt(string, key, {
    iv: CryptoJS.enc.Utf8.parse("Fa6Fy$F8.qRvHKU+"),
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.NoPadding
  });
  return encrypted.toString()
}

document.getElementById("encrypted").innerHTML = encrypt("ABCD1234");

, тогда вывод sRdk5O4U + WA =

, когда я пытаюсь расшифроватьв java

import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;

class Main {
  public static void main(String[] args) {
        String data = "sRdk5O4U+WA=";
        String key = "g@eNR@2H'9n/ZF8s";
        String iv = "Fa6Fy$F8.qRvHKU+";
        try 
        {
            byte[] encrypted1  = Base64.getDecoder().decode(data);
            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes("UTF-8"));
            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);


            byte[] original = cipher.doFinal(encrypted1);

            String decrypt = new String(original).trim();
            System.out.println("decrypt "+decrypt);
        } catch (Exception e)
        {
            System.out.println("e "+e.toString());
        }
  }
}

выдает исключение javax.crypto.IllegalBlockSizeException: длина ввода не кратна 16 байтам

код java: https://repl.it/repls/NoxiousWavyMp3

код JavaScript: https://codepen.io/anon/pen/ydEpZB

...