Usar chave pública dentro do Java depois de exportá-la pela ferramenta Keytool

Bom dia galera,

Acessando a parte de artigos do GUJ encontrei a parte de Assinatura Digital com um código em Java para trabalhar com este conceito. O link é: http://www.guj.com.br/java.tutorial.artigp.141.1.guj.

Um dos métodos de buscar a chave pública através de um arquivo de certificado digital está logo abaixo.

/** * Extrai a chave pública do arquivo. */ public static PublicKey getPublicKeyFromFile( File cert, String alias, String password ) throws Exception { KeyStore ks = KeyStore.getInstance ( "JKS" ); char[] pwd = password.toCharArray(); InputStream is = new FileInputStream( cert ); ks.load( is, pwd ); Key key = ks.getKey( alias, pwd ); Certificate c = ks.getCertificate( alias ); PublicKey p = c.getPublicKey(); return p; }

Neste caso ele extrai a chave pública de um certificado. Mas gostaria de saber o que preciso mudar/alterar para que ele busque não o certificado, mas sim já a chave pública que já exportei pelo comando keytool. Eu criei uma interface gráfica e na parte do destinatário gostaria que ele selecionasse a chave pública e assim fizesse a descriptografia do dado e assim garantisse sua autenticidade e integridade.

Só preciso deste detalhe pra complementar minha aplicação, porque da forma que o método está implementado, ele recebe o certificado, que contém já a chave privada e pública, e extrai a chave pública.

Obs.: Aproveitando este tópico. No JAVA só posso fazer assinatura de um dado com a chave privada? O método initSign da classe Signature recebe como parâmetro SOMENTE chave privada.

Aguardo contato.

Raphael :slight_smile:

Agradeço a todos que visitaram este tópico mas ele já está finalizado pois já consegui resolver o problema. Para aquele que se interessarem abaixo está o método que extrai a chave pública de um arquivo .x509 exportado através da ferramenta keytool.


public static PublicKey getPublicKeyFromFile(File file) throws Exception {
	  
   FileInputStream fis = new FileInputStream( file );
   CertificateFactory certF = CertificateFactory.getInstance("X.509");
   X509Certificate cert = (X509Certificate)certF.generateCertificate(fis);   
   PublicKey p = cert.getPublicKey();
    
   return p;  
}

Valeu!!

Raphael