Importanto Public key de algoritmo RSA

1 resposta
N

Pessoal, blz?

Seguinte eu estou com um problema... antes de falar o que é vou mostrar pra vcs um trecho deste código de testes:

// Gera um par de chaves RSA de 1024 bits
				KeyPairGenerator gerador = KeyPairGenerator.getInstance("RSA");
				gerador.initialize(1024);
				KeyPair chaves = gerador.generateKeyPair();
				
				
				
				// Cria uma implementação do RSA
				Cipher cifra = Cipher.getInstance("RSA");
				
				// Criptografa a mensagem com a chave pública
				// inicializa o algoritmo para a criptografia
				
				cifra.init(Cipher.ENCRYPT_MODE,chaves.getPublic());
				
				// criptgrafia o texto inteiro
				byte[] mensagemCifrada = cifra.doFinal(mensagem);
				
				cifra.init(Cipher.DECRYPT_MODE,chaves.getPrivate());
				byte[] mensagemOriginal = cifra.doFinal(mensagemCifrada);
				
				
				System.out.println("Chave Publica: "+chaves.getPublic().toString());
				System.out.println("Chave Privada: "+chaves.getPrivate().toString());
				
				
				
				System.out.println("A mensagem cifrada fica: ");
				System.out.println(new String(mensagemCifrada));
				System.out.println("A mensagem original era: ");
				System.out.println(new String(mensagemOriginal));

O quê acontece é o seguinte, no codigo acima a chave pública está sendo gerada automaticamente.... no meu caso eu quero usar um chave pública que está em um arquivo. ou seja eu recebi uma chave publica e quero criptografar uma mensagem utilizando ela.

Como eu faço pra setar esta chave publica??? eu tentei fazer o seguinte, mas deu um erro de "invalid key format" ... eis a minha tentativa :

byte[] lPublicRSAKey = chavePublica.getBytes();
				

				
				X509EncodedKeySpec lX509EncodedKeySpec = new X509EncodedKeySpec(lPublicRSAKey);
				PublicKey lPublicKey = KeyFactory.getInstance("RSA").generatePublic(lX509EncodedKeySpec);
				
				//	Cria uma implementação do RSA
				Cipher cifra2 = Cipher.getInstance("RSA");
				
				// Criptografa a mensagem com a chave pública
				// inicializa o algoritmo para a criptografia
				
				cifra2.init(Cipher.ENCRYPT_MODE,lPublicKey);

				
				// criptgrafia o texto inteiro
				byte[] mensagemCifrada2 = cifra2.doFinal(mensagem);
				
				cifra.init(Cipher.DECRYPT_MODE,chaves.getPrivate());
				byte[] mensagemOriginal2 = cifra2.doFinal(mensagemCifrada);

Só lembrando, eu não possuo o "n" e o "E" do algoritmo RSA... apenas a chave pública, que por sinal é esta aqui:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 6.0.2i

mQGiBEIl860RBADWr2u9ngfnk/5ziWIM5ZsT9zSu1RShkZpdQ7qIf3k393+sXKIW
lX8aubYSmhb27VkZ7u3LN90v9mNe+USPoRNjnHEJ1LsUMh/ZG+MuLA8Er7bnjUbm
IfFz0O6t5LEsfgstuOMM7Yw41SvVVoo6ta54feQRy8BJ4l9RjBrFnv4yqwCg/3+5
+FykiLAx2hK+8WXaPH0BcFED/jclXSOP3VO22RY1EpZRfYH0nvBURUATICTKQQkx
vadPGOEYcsrPN5F4t8gh61NPACxCiBZ3LouVkfMdRNN7CJwU4R11+NY9NxkYoFg/
epgNitrXRoxsbX4eGx+4Bye4r5Yp0tjRPbwYI+17pZbchN6O/LWPA5b1A119k6ri
RcHsA/9BV3eYoXRVJnpRdzIwoC4hfCixG3SbZ6vPEraUwhEeRyoCWhq2droQv9fh
UQvo5Ro7kgVWIrQIcAvc1NXbM0t/5cBuvv+XZDIYUr78bb72we+l0d0AxWUWowV9
gw8A+T3ez/QRTlDUIaL/fJo0AH8rmDGmIRjcuJ7lm1cko3+JtrQVSVRTQSBUZWxl
Y29tdW5pY2Fjb2VziQBLBBARAgALBQJCJfOtBAsDAgEACgkQUGhnb1Up0apBbgCg
kw3l3pfchEAubx2QIYLHDvGGo3QAoM4kGkYbgRbqSfgjz/Lycyke19BpuQINBEIl
860QCAD2Qle3CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfG
y0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2
vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd
5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0Y
bN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWak
XUGfnHy9iUsiGSa6q6Jew1XpMgs7AAICB/9WJcDUXIoDb+LBCnOXY0AR4OLwvi7G
gGlCdBVFtYzOQj9wNqeNUPs/v4LdfTvGcxqbTqps7bK63hRfPMtlrhRYLSWPUjiG
xGC5LgLkl/kHnAx08N8rotJFowX6K/5k7PT9WALOwn/bgZ26oQG+23X+0YoHRzWQ
VrwNmV46d0rjjXjCDOs11GRVJv5GPtc++Vk0jCeHt0ZorpAxJGiKub91js28BqAe
XkmoAhCf8zB4aFRm044JM//tnmroVI4qBzCDXe0bi9T+lg8rVtI28Ws7aWuNXXTA
h+rRdUn44Y4J96Q7Zgy62KwVLDLSw5FA3C6sMDjcdpy9NXiT8hPM1i4WiQBGBBgR
AgAGBQJCJfOtAAoJEFBoZ29VKdGq/iMAnAqvVijJiv+X1LJtoekNXKcpyeTKAKDm
K+90gMQid581X4DaV6ZNWMrwfQ==
=9z+Q
-----END PGP PUBLIC KEY BLOCK-----

E aí alguem tem uma ideia???

1 Resposta

T

O PGP encapsula a chave pública em um formato proprietário do PGP.
Para usá-la, baixe o pacote BouncyCastle de www.bouncycastle.org e veja as classes de suporte ao PGP.
Prepare-se que vai dar um pouco de trabalho, já que a documentação é o próprio fonte. Se você souber um pouco de inglês, assine as mailing lists do BouncyCastle e veja se alguém no forum Cryptography em forum.java.sun.com consegue lhe der uma pista ( o sr. Jon Eaves, um dos autores do BouncyCastle, aparece lá de vez em quando. )

Criado 4 de abril de 2005
Ultima resposta 4 de abr. de 2005
Respostas 1
Participantes 2