Я очень плохо знаком с платформой Android и шифрованием, так что терпите меня.Мне нужно вызвать веб-сервис, который требует, чтобы я зашифровал параметр перед его вызовом.Я получил спецификацию, которая гласит:
"Мы используем AES для шифрования. Настройки шифрования следующие:
Теперь моя проблема, вероятно, заключается в недостаточном понимании процесса шифрования.У меня есть свой открытый ключ, но что мне с ним делать?Я пытался найти ответ в Интернете, но все мои усилия, похоже, приводят либо к неправильному зашифрованному ключу, либо очень часто к «InvalidKeyLengthException, ключ не 128, 196 или 256 бит» (или что-то в этом общем направлении).Мои последние усилия, которые в значительной степени основаны на ответе здесь, в стеке, выглядят так:
String input = "TheParameterIWantToEncrypt";
String secretID = "PublicKey12345678910";
char[] inputChars = input.toCharArray();
char[] pswChars = secretID.toCharArray();
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithMD5AndDES", new BouncyCastleProvider());
KeySpec spec = new PBEKeySpec(pswChars);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters params = cipher.getParameters();
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
byte[] ciphertext = cipher.doFinal(input.getBytes());
System.out.println(new String(ciphertext));
Может ли кто-нибудь объяснить мне, в каком порядке делать вещи в предоставленной спецификации?Кроме того, любой код, реализующий это поведение на платформе Java / Android, также будет весьма обязателен.