Учитывая, что последний блок неправильно заполнен AES

Я шифрую строку и сохраняю ее в файле cookie на стороне клиента... но когда я отправляю эту зашифрованную строку из js в java-код, это дает мне вышеупомянутое исключение.

Код, который я использую для шифрования и дешифрования:

public static final String UNICODE_FORMAT = "UTF8";

public static String encrypt(String Data, SecretKeySpec skeySpec,IvParameterSpec ivspec) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec);
        byte[] plainBytes = Data.getBytes(UNICODE_FORMAT);
        byte[] encrypted = cipher.doFinal(plainBytes);
        String encryption = bytesToString(encrypted);
        return encryption;
}

public static String decrypt(String encryptedData,SecretKeySpec skeySpec,IvParameterSpec ivspec) throws Exception {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);
    byte[] decryptval = hexToBytes(encryptedData);
    byte[] decrypted = cipher.doFinal(decryptval);
    return new String(decrypted);
}

public static String bytesToString(byte[] bytes) {
    HexBinaryAdapter adapter = new HexBinaryAdapter();
    String s = adapter.marshal(bytes);
    return s;
}

public static byte[] hexToBytes(String hexString) {
    HexBinaryAdapter adapter = new HexBinaryAdapter();
    byte[] bytes = adapter.unmarshal(hexString);
    return bytes;
}

Вы можете сказать мне, в чем проблема может быть?? Я попробовал решения, упомянутые на stackru.com, а также несколько других решений, но ни одно из них не сработало... Я получаю эту ошибку, потому что отправляю зашифрованную строку в JS, и она меняет заполнение строки?

1 ответ

Как упоминалось в @ JoopEggen - создание строки из байта [] может ее сломать.

Можете ли вы просто сериализовать вместо создания строки из него?

Другие вопросы по тегам