Criptografia RSA

3 respostas
L

Pessoal, boa tarde.

Preciso criptografar um texto utilizando RSA. Eu tenho a chave publica e preciso criptografar o texto com base nessa chave.

<BitStrength>2048</BitStrength><RSAKeyValue><Modulus>muxWG1ZrCuFqHyZHD0VcLgVr0yAzvbqv7mCr+xbm5dT9+q/o8uTKcBAynoLtjaGDV0WlwoMfaFFj0Y6ZxsC1jDp3FKWxxWu+VBhRFXGbNDJE4URdBLArAhNz9HmHtgsqq31leCJYzXFNOVvm0dBW2Knd7KlTs7fnkWO/1CSo2jQs7oTxrpXBQTbLd3BI18SqcXkYzbDstnyOv7A6+sKf+055iPL6BGrX/tt0ADkASvVW8FIt7Tp6DAbmVHbzwMZVv8e25NHoo8BUFGzZQOXdQjdWIYIYGAIwkdG7Y0Wuznt7Yzfmt4580lIrdVFQHsnMIzVs9tfOiIJE0rwayOv7ew==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>

Alguém possui algum exemplo? procurei na net mas não achei nada assim, com esse objetivo.

Obrigado

3 Respostas

L

Alguém?

jpvarandas

Leandro.

Acredito que esse XML tenha sido gerada através do .NET, certo?

A chave público é composta pelo Modulus e pelo Exponent, então você pode montar algum algoritmos que extrai esses dados do XML.

Com esses dados em mãos, você pode executar um algoritmo como esse:

final String modString = "muxWG1ZrCuFqHyZHD0VcLgVr0yAzvbqv7mCr+xbm5dT9+q/o8uTKcBAynoLtjaGDV0WlwoMfaFFj0Y6ZxsC1jDp3FKWxxWu+VBhRFXGbNDJE4URdBLArAhNz9HmHtgsqq31leCJYzXFNOVvm0dBW2Knd7KlTs7fnkWO/1CSo2jQs7oTxrpXBQTbLd3BI18SqcXkYzbDstnyOv7A6+sKf+055iPL6BGrX/tt0ADkASvVW8FIt7Tp6DAbmVHbzwMZVv8e25NHoo8BUFGzZQOXdQjdWIYIYGAIwkdG7Y0Wuznt7Yzfmt4580lIrdVFQHsnMIzVs9tfOiIJE0rwayOv7ew==";
	final String expString = "AQAB";
	
	byte[] modBytes = com.migcomponents.migbase64.Base64.decode(modString);
	byte[] expBytes = com.migcomponents.migbase64.Base64.decode(expString);
			
	RSAPublicKeySpec keySpec = new RSAPublicKeySpec(new BigInteger(1, modBytes), new BigInteger(1, expBytes));
	KeyFactory fact = KeyFactory.getInstance("RSA");
	PublicKey pubKey = fact.generatePublic(keySpec);
	
	Cipher cipher = Cipher.getInstance("RSA");		
	cipher.init(Cipher.ENCRYPT_MODE, pubKey);
	
	String input = "Text to be encrypted...";
	byte[] inputBytes = input.getBytes("UTF-8");
	
	byte[] encBytes; 
	String encString;
	
	encBytes = cipher.doFinal(inputBytes);
	encString = com.migcomponents.migbase64.Base64.encodeToString(encBytes, false);
	System.out.println(encString);

Espero que tenha ajudado!

L

Sim, ele foi desenvolvido em .NET

Vou testar seu exemplo João, mas valeu a dica, vai ajudar bastante.

Obrigado

Criado 9 de junho de 2016
Ultima resposta 29 de jun. de 2016
Respostas 3
Participantes 2