Мне нужно отправить зашифрованную строку из Javascript на Android, но я получаю следующую ошибку: javax.crypto.BadPaddingException: блок pad поврежден
К сожалению, я не могу изменить реализацию Android, я могу только адаптироватьJavascript код.Я пробовал CryptoJS и теперь aes-js.
Код Android для расшифровки:
SecretKey secret_user_key = new SecretKeySpec(user_key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secret_user_key);
byte[] clearBytes = cipher.doFinal(encrypted);
Javascript для шифрования:
var aesCbc = new aesjs.ModeOfOperation.cbc(new Uint8Array(userKey));
var encrypted = aesCbc.encrypt(aesjs.padding.pkcs7.pad(clearByteArray));
Ключ пользователя и зашифрованные переменныеодинаковы на обеих платформах.И пользовательский ключ, и clearByteArray имеют размер 32 байта.
Обратите внимание, что в реализации Android не указывается заполнение, iv или режим работы, но я не могу изменить эту часть.
Я пробовалмиллиард различных комбинаций параметров шифрования и потеряли бесчисленные часы на этом.
Редактировать: Также вот эквивалентный метод шифрования на Android, который я должен воспроизвести на Javascript:
SecretKey secret_user_key = new SecretKeySpec(user_key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secret_user_key);
byte[] encrypted = cipher.doFinal(clearBytes);
return encrypted;