Для подключения к веб-сервису нужна строка encryptst, зашифрованная открытым ключом в формате xml, мне нужна функция для этого шифрования.
public static String enc(Context context,String input) throws InvalidKeyException, InvalidKeySpecException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException, NoSuchPaddingException, NoSuchAlgorithmException {
String public_key_modulus = "xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6WOocLZAtNfyxSZDU16ksL6
WjubafOqNEpcwR3RdFsT7bCqnXPBe5ELh5u4VEy19MzxkXRgrMvavzyBpV
RgBUwUlV5foK5hhmbktQhyNdy/6LpQRhDUDsTvK+g9Ucj47es9AQJ3U=";
String public_key_exponent= "AQAB";
byte[] expBytes = Base64.decode(public_key_exponent,Base64.DEFAULT);
byte[] modBytes = Base64.decode(public_key_modulus,Base64.DEFAULT);
BigInteger modules = new BigInteger(1, modBytes);
BigInteger exponent = new BigInteger(1, expBytes);
KeyFactory factory = KeyFactory.getInstance("RSA");
Cipher cipher = Cipher.getInstance("RSA");
RSAPublicKeySpec pubSpec = new RSAPublicKeySpec(modules, exponent);
PublicKey pubKey = factory.generatePublic(pubSpec);
Log.i("pubKey",pubKey.toString());
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] encrypted = cipher.doFinal(input.getBytes("UTF-8"));
return new String(encrypted);}
в функции pubkey показано ниже:
10-03 20:31:31.811 2314-2314/com.zamangasht I/pubKey: OpenSSLRSAPublicKey{modulus=b273acce7f01200e3adf180e16b33126e46f00f1f4e94183c82b9b032be44a40b7dd19b08503be4e56551af25dab7a36ce55e74119ba48657a5fb5d33c0ccd3c01c40982da5a90e642dfe8d9ac55a5a38f53103131e059857c3a7fdc4577f2434a8b0f4c9455bb27a30dd03b1fee1c4fa6621268c8d54db9bf668313f53f7c55,publicExponent=10001}
но на сервере возвращается ошибка, как зашифровать с помощью этого открытого ключа в формате XML
<RSAKeyValue>
<Modulus>
xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6WOocLZAtNfyxSZDU16ksL6
WjubafOqNEpcwR3RdFsT7bCqnXPBe5ELh5u4VEy19MzxkXRgrMvavzyBpV
RgBUwUlV5foK5hhmbktQhyNdy/6LpQRhDUDsTvK+g9Ucj47es9AQJ3U=
</Modulus>
<Exponent>
AQAB
</Exponent>