Я шифрую в ojb-c с помощью SecKeyEncryptedData и пытаюсь расшифровать в Java с помощью javax.Cipher и сталкиваюсь с проблемой.
Недавно я перешел к созданию длинных блоков и мне нужно было использовать симметричное шифрование сКлюч AES, зашифрованный парой асимметричных ключей.У меня проблемы с декодированием.
У меня есть ключ iOS kSecKeyAlgorithmRSAEncryptionPKCS1, работающий для асимметричных данных, совпадающих с Cipher.getInstance («RSA / ECB / PKCS1Padding») в Java.Это декодирует короткие блоки.
Поскольку мне нужно отправить более длинные блоки, и я пытаюсь переключиться на kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM на iOS, и он прекрасно шифрует, но я не могу найти метод для использования в Cipher, чтобы расшифровать его и непонять, нужно ли это сделать в Java в двух шагах в облаке.
OBJ-C:
SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM;
NSData* cipherText = nil;
cipherText = (NSData*)CFBridgingRelease( // ARC takes ownership<br>
SecKeyCreateEncryptedData(self.pubKey, algorithm,
(__bridge CFDataRef)data, &error));
Java:
try {
cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, priv);
byte[] dog = decoder.decode(encString);
dec = cipher.doFinal(dog);
res = new String(dec);<br>
} // handle errors
Очевидно, что декодирование завершается неудачей.
Итак, мой вопрос состоит из 2 частей.
- существует ли тип шифра, который будет выполнять необходимое декодирование, или мне нужно взломать зашифрованный ключ AES и сначала расшифровать его?
- Если мне нужно разбить его, то как долго это зашифрованная ключевая часть AES блока данных и, если вы знаете шифры для этого, это было бы замечательно.