Я сгенерировал в своем приложении для Android пару ключей RSA.
Я получаю от веб-службы - ключ AES, зашифрованный моим открытым ключом RSA - строку, закодированную ключом AES.
Поэтому я должен сделать следующее: - расшифровать ключ AES - расшифровать строку с помощью полученного ключа AES.
Чтобы сгенерировать ключи RSA, я сделал:
keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(size);
keypair = keyGen.genKeyPair();
privateKey = keypair.getPrivate();
publicKey = keypair.getPublic();
Вкл.Для расшифровки RSA я использую:
public static byte[] decryptRSA( PrivateKey key, byte[] text) throws Exception
{
byte[] dectyptedText = null;
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
dectyptedText = cipher.doFinal(text);
return dectyptedText;
}
При расшифровке AES я использую:
public static byte[] decryptAES(byte[] key, byte[] text) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(text);
return decrypted;
}
Итак, в моем коде для получения расшифрованного ключа AES я делаю
byte[] decryptedAESKey = sm.decryptRSA(key, Base64.decode(ReceivedBase64EncryptedAESKey));
byte[] decryptedString = sm.decryptAES(decryptedAESKey, Base64.decode(ReceivedEncryptedAESString));
В конце я получаю нулевое значение для decryptedString.Что я делаю неправильно ?