Dúvidas sobre PublicKey

7 respostas
R

Abaixo tenho uma variável do tipo PublicKey, gostaria de saber como faço para esta variável receber minha chave píblica no formato string?

PublicKey pub = “00976EEA9A1787E86B52C2238F6B1EB0F2E0EFF47A9C3DC51C2795FDFBB477B4A71B04B564D810D46CB31A12”+
“11BF71CD4E808198D64D064BDF93AEB4E1E226060224F07C761AFCFF7C78C3AEBCA0240EF5E03554B2E7F584” +
“7A470101F9C1AE662E3031FA2D3D2A6F5BDB62F6A1CF53669B811C53F60239093F40A452EA48AAA889”;

7 Respostas

T

Pegue essa string (que está em hexadecimal), converta-a a em um array de bytes.

Estou supondo que essa chave pública seja RSA e esteja em formato ASN.1 (DER) e que obedeça ao padrão PKCS#9. Se for isso, então você terá de passar o array de bytes para o construtor de X509EncodedKeySpec. Com esse objeto X509EncodedKeySpec, acho que você pode obter uma KeyFactory com KeyFactory.getInstance (“RSA”), e a seguir, com essa KeyFactory, gerar uma PublicKey com generatePublic.

(O exemplo, em KeyFactory, usa o algoritmo DSA, não o RSA, mas o espírito é o mesmo.

Achou complicado? Então vá estudar outra coisa. Criptografia é complicado e chato mesmo. Leia o livro do David Hook ( http://www.amazon.com/Beginning-Cryptography-Java-David-Hook/dp/[telefone removido] ).

R

Eu entendi, mas eu realizei os seguintes códigos abaixo:

PrivateKey priv;

byte[] bt = new byte[256];

bt = XXXAssinaturaDigitalCriptografia.hexStringToByteArray("

“00976EEA9A1787E86B52C2238F6B1EB0F2E0EFF47A9C3DC51C2795FDFBB477B4A71B04B564D810D46CB31A12”+

“11BF71CD4E808198D64D064BDF93AEB4E1E226060224F07C761AFCFF7C78C3AEBCA0240EF5E03554B2E7F584” +

“7A470101F9C1AE662E3031FA2D3D2A6F5BDB62F6A1CF53669B811C53F60239093F40A452EA48AAA889”);

priv = X509EncodedKeySpec(bt);

Está paresentando um erro na última linha, o que está faltando para realizar a conversão?

T

Cadê o “new”? Cuidado com a falta de atenção. Código de criptografia e assinatura digital é bem chatinho mesmo e você deve prestar muita atenção ao que está fazendo.

R

Eu fiz o seguinte código:

byte[] bt = new byte[256];

bt = XXXAssinaturaDigitalCriptografia.hexStringToByteArray("

“00976EEA9A1787E86B52C2238F6B1EB0F2E0EFF47A9C3DC51C2795FDFBB477B4A71B04B564D810D46CB31A12”+

“11BF71CD4E808198D64D064BDF93AEB4E1E226060224F07C761AFCFF7C78C3AEBCA0240EF5E03554B2E7F584” +

“7A470101F9C1AE662E3031FA2D3D2A6F5BDB62F6A1CF53669B811C53F60239093F40A452EA48AAA889”);
X509EncodedKeySpec enc = new X509EncodedKeySpec(bt);
     
     PrivateKey priv = null;
     KeyFactory key = null;
   
     key = key.getInstance("RSA");
    try {
        priv = key.generatePrivate(enc);
    } catch (InvalidKeySpecException ex) {
        ex.printStackTrace();
    }
     this.pprivateKey = priv;

Eu sei que o KeyFactory não aceita RSA, gostaria de saber se alguém sabe a classe que substitua o KeyFactory para acitar o RSA. Isso é muito importante, pois estamos desenvolvendo aqui na empresa a Assinatura digital tipo EAD de acordo com o Ato/Cotepe

T

Use o BouncyCastle ( http://www.bouncycastle.org ) e leia o livro do David Hook que lhe indiquei. Encomende o livro já - deve haver alguma verba no seu projeto para isso, não? - e peça entrega expressa; não consigo lhe explicar tudo que é necessário para fazer sua aplicação funcionar.

R

Eu ainda não sei ler muito bem inglês, não existe uma versão deste livro (David Hook) em português? Na universidade onde estudo tem um livro de criptografia, vou pegar hoje de noite. Mas gostaria de saber se não existe uma forma de fazer utilizando a API do Java mesmo, a única coisa que estou precisando até agora é passar os valores em Hexdeximal para a classe PrivateKey? O reste eu já tenho pronto, a função MD5 e etc…

R

Estou tendo problema com o código abaixo:

Cipher cifra = Cipher.getInstance("RSA/None/NoPadding", "BC"); Key chave = getPprivateKey(); cifra.init(Cipher.ENCRYPT_MODE, chave); try { passinatura = cifra.doFinal(Md5Byte); setAssinaturaEAD(AssinaturaDigital.byteArrayToHexString(passinatura)); } catch (IllegalBlockSizeException ex) { Logger.getLogger(EADClasse.class.getName()).log(Level.SEVERE, null, ex); }

Nesta linha ’ passinatura = cifra.doFinal(Md5Byte)’ retorna uma exceção, não sei o que está ocasionando isso, gostaria de saber se falta mais alguma implementação para esse meu método?

Criado 1 de junho de 2009
Ultima resposta 5 de jun. de 2009
Respostas 7
Participantes 2