Java – Como Armazenar as Chaves de uma Criptografia Assimétrica

by Andres Amador / from beautifuldecay.com

Salvar chaves públicas e privadas é tão simples quanto criá-las no Java, apesar de não ser tão intuitivo e quase impossível descobrir como apenas lendo o nome dos métodos. Com algumas pequenas pesquisas descobri que o método getEncoded() existente tanto na classe PrivateKey quanto na classe PublicKey retorna um vetor de bytes contendo verdadeiramente a chave. Tendo esse vetor de bytes, podemos salvá-los onde desejarmos para depois recuperar como mostram as linhas de código abaixo:

Ok, salvei os bytes e recuperei em um outro momento em meu código, mas como transformar esses bytes de novo em PrivateKey e PublicKey, ou como criar instâncias dessas classes com esses bytes que estou recuperando? Primeiramente é preciso saber que as chaves privadas são “encoded” no formato PKCS8, enquanto o chaves públicas sofrem esse processo no formado X509. Depois de ter isso em mente, é preciso ter conhecimento que existe no Java um singleton chamado KeyFactory que é capaz de gerar as chaves públicas e privadas se fornecermos uma instância de EncodedKeySpec a ele referente a nossa chave. Temos que criar então uma instância de EncodedKeySpec informando os bytes de nossa chave privada e uma outra instância dessa mesma classe para nossa chave pública, porém informando os bytes de nossa chave pública.

Lembra do que primeiramente temos que ter em mente? Sim, os formatos. É aqui que eles vão fazer a real diferença no procedimento. Cada nossa instância de EncodedKeySpec deve estar relacionado a esse formado e por isso essa classe possui duas classes filhas PKCS8EncodedKeySpec e X509EncodedKeySpec. O resto fica muito óbvio, passaremos os bytes de nossa chave privada para a instância de PKCS8EncodedKeySpec e os bytes de nossa chave pública nós passaremos para nossa instância de X509EncodedKeySpec. Tendo todo esse procedimento em mente, fica fácil entender o código baixo:

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s