Criptografia RSA

Tenho que fazer um projeto que efetue a criptografia baseado numa string enviada.
No processo, eu obtenho a string de um webservice feito em .net.
Depois disso eu tenho que criptografar os dados usando RSA, eu fiz o código:

	public String validarAutenticacaoFuturo(String usuario, String senha) throws NoSuchAlgorithmException, InvalidKeySpecException, Exception{
		WsAutenticacaoSoapProxy auth = new WsAutenticacaoSoapProxy();		
		String keyPublic = "<RSAKeyValue><Modulus>0Jlux+JHnHcj7w7+7Lo8dggyIxzr8Udh9zN11O9gxv65b0dvAiSCwieB7VTfAbHvD9V61q0ur60BX9FFZksAZU9zSDbYWu2cmRboiExsOrbMy8UguXdsZNIQEQJCqoe80oLupc8Xcje0OFg+WFvvOEucH4QujO288+19P0VTMQ0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";		
		
		ClienteAutenticacao cliente = new ClienteAutenticacao();
		
		AutenticacaoDto authDTO = (AutenticacaoDto)cliente.gerarParametrosAutenticacao(keyPublic);
		PublicKey publica = RSAJEncrypt.generatePublicKeyByModulusExponent(authDTO.getModulus(), authDTO.getExponent());		
		byte[] bytes = RSAJEncrypt.encrypt(senha.getBytes(), publica); 
		String password = RSAJEncrypt.encodeBASE64(bytes);
		
		String msg = "<?xml version=\"1.0\"?>";
		msg += "<ObterPerfil xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
		msg += "<Nome>" + usuario + "</Nome>";
		msg += "<Senha>";
		msg += password;
		msg += "</Senha>";
		msg += "<Sistema>Intranet</Sistema>";
		msg += "</ObterPerfil>";	
		System.out.println("----------------------------------------------------------------");
		System.out.println(msg);
		String permissoes = auth.obterPermissoesUsuario(msg);
		return permissoes;
	}

O problema é que estou recebendo a seguinte mensagem:

Alguém tem idéia do que possa ser? Ou se tiver outra solução.

Valeu

Uma chave RSA de X bits só pode criptografar dados com X bits ou menos. Por exemplo, uma chave de 1024 bits (128 bytes) só pode criptografar até 128 bytes.

Uma página Web https, onde os dados são criptografados usando-se uma combinação de RSA e algum algoritmo como o AES ou o TripleDES, não tem esse problema porque os dados são criptografados usando-se um algoritmo como o AES (256 bits) ou o TripleDES (168 bits) e apenas a chave desses algoritmos é criptografada via RSA.

[quote=entanglement]Uma chave RSA de X bits só pode criptografar dados com X bits ou menos. Por exemplo, uma chave de 1024 bits (128 bytes) só pode criptografar até 128 bytes.

Uma página Web https, onde os dados são criptografados usando-se uma combinação de RSA e algum algoritmo como o AES ou o TripleDES, não tem esse problema porque os dados são criptografados usando-se um algoritmo como o AES (256 bits) ou o TripleDES (168 bits) e apenas a chave desses algoritmos é criptografada via RSA. [/quote]

Opa, agradeço muito a atenção entanglement, mas como eu poderia resolver?
O WebService me fornece o modulus e o exponent, com base nisso eu devo criar uma chave publica ok?
O problema é que o erro persiste?

Normalmente, quando se quer criptografar alguma coisa com RSA, você nunca nunca nunca usa o RSA sozinho, a menos que os dados a serem criptografados tenham menos de X bits (onde X é o tamanho da chave).

Normalmente você faz o seguinte, em resumo:

  • Lado que criptografa -
  1. Escolher um algoritmo simétrico como o TripleDES (168) ou o AES (128 bits) para criptografar seus dados (criptografia “simétrica”)
  2. Criar uma chave aleatória para esse algoritmo simétrico, que só vai valer para esse pacote de dados que você vai criptografar
  3. Criptografar a chave aleatória com a chave pública RSA . Digamos que você tenha escolhido o AES
  4. Criptografar seus dados com a chave aleatória AES - como sabemos, o AES criptografa dados em blocos de 16 bytes, mas o tamanho dos dados que podem ser criptografados é indefinido
  5. Mandar a chave aleatória criptografada com RSA, e os dados que foram criptografados com AES
  • Lado que decifra os dados -
  1. Pegar a chave aleatória que foi criptografada com RSA, e decifrá-la com a chave privada RSA
  2. Usar a chave AES que foi decifrada para decifrar os dados que você quer criptografar

entanglement, fantástico o seu post!!!

você tem, um exemplo funcional?

Obrigado