En .NET que han generado el siguiente archivo de clave pública:¿Por qué mi encriptación Java RSA me da una excepción aritmética?
<RSAKeyValue>
<Modulus>xTSiS4+I/x9awUXcF66Ffw7tracsQfGCn6g6k/hGkLquHYMFTCYk4mOB5NwLwqczwvl8HkQfDShGcvrm47XHKUzA8iadWdA5n4toBECzRxiCWCHm1KEg59LUD3fxTG5ogGiNxDj9wSguCIzFdUxBYq5ot2J4iLgGu0qShml5vwk=</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
.NET es feliz para cifrar utilizando su métodos normales.
Estoy tratando de usar esta clave para codificar una cadena en Java. Me encuentro con una excepción aritmética cuando intento encriptar la cadena.
El siguiente es el código que estoy utilizando para cifrar:
byte[] modulusBytes = Base64.decode(this.getString(R.string.public_key_modulus));
byte[] exponentBytes = Base64.decode(this.getString(R.string.public_key_exponent));
BigInteger modulus = new BigInteger(modulusBytes);
BigInteger exponent = new BigInteger(exponentBytes);
RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PublicKey pubKey = fact.generatePublic(rsaPubKey);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(new String("big kitty dancing").getBytes());
Es la última línea en el bloque de código que falla.
He examinado numerosos ejemplos y esto es lo mejor que pude encontrar. Si no es obvio, el R.string.public_key_modulus es una copia/pega del texto en el elemento Modulus, lo mismo aplica para el exponente.
¿Qué hice mal?
sí, eso lo resolvió muy bien, gracias por la respuesta rápida! – badMonkey