Criptografia / Decriptografia

4 respostas
Q

Pessoal.
Tô com o seguinte problema. Eu tenho uma classe que faz a Criptografia e Decriptografia das senhas dos meus usuários. Esta classe possui 2 métodos, são eles: Criptografa / Descriptografa.
A Criptografia funciona sem problemas, o problema está quando eu vou Decriptografar, ele me dá o seguinte erro: Given final block not properly padded. Eis os meus métodos:

  • Criptografia
    
    public String Criptografa(String mensagem) throws
    
    NoSuchAlgorithmException,
    
    NoSuchPaddingException,
    
    InvalidKeyException,
    
    BadPaddingException,
    
    IllegalBlockSizeException
    
    {
    
    // Gera a chave DES de 56 bits
    
    KeyGenerator gerador = KeyGenerator.getInstance(DES);
    
    gerador.init(56);
    
    Key chave = gerador.generateKey();
    

    // Cria instância da implementação de DES
    Cipher cifra = Cipher.getInstance(“DES”);

    // Inicia Criptografia da Mensagem
    
    cifra.init(Cipher.ENCRYPT_MODE, chave); // Inicia algoritmo
    
    byte[] mensagemByte = mensagem.getBytes();
    
    byte[] mensagemCifrada = cifra.doFinal(mensagemByte);
    
    String msgRetorno = new String(mensagemCifrada);
    
    // Retorna a senha Criptografada
    
    return msgRetorno;
    
    }
    
  • Decriptografia
    
    public String Decriptografa(String mensagem) throws
    
    NoSuchAlgorithmException,
    
    NoSuchPaddingException,
    
    InvalidKeyException,
    
    BadPaddingException,
    
    IllegalBlockSizeException
    
    {
    
    // Gera a chave DES de 56 bits
    
    KeyGenerator gerador = KeyGenerator.getInstance(DES);
    
    gerador.init(56);
    
    Key chave = gerador.generateKey();
    

    // Cria instância da implementação de DES
    Cipher cifra = Cipher.getInstance(“DES”);

    // Decriptografa Mensagem
    
    cifra.init(Cipher.DECRYPT_MODE, chave);
    
    byte[] mensagemByte = mensagem.getBytes();
    
    byte[] mensagemOriginal = cifra.doFinal(mensagemByte);
    
    String msgDecripto = new String(mensagemOriginal);
    

    return msgDecripto;
    }

O erro ocorre somente no método de Decriptografia, a Criptografia está OK.
Se alguém puder dar uma força eu agradeço muito.
Valeu.
Kinho.

4 Respostas

J

Olá a todos,

Eu tentei refazer o que foi feito neste post e também não consegui criar dois métodos para cifrar e outro para decifrar.

Alguém tem alguma idéia?

abraços.

d34d_d3v1l

por favor utilize a tag code para gente conseguir visualizar melhor o código?
abraços

J

Olá,

Eu descobri o que estava havendo.

A chave gerada não é a mesma para criptografar e descriptografar.

// Gera a chave DES de 56 bits

KeyGenerator gerador = KeyGenerator.getInstance(DES);

gerador.init(56);

Key chave = gerador.generateKey();

Faça o teste e imprima a chave no método criptografia e descriptografia e você verá que ambas são diferentes, portanto, para usar a decifragem você deverá ter a mesma chave que foi utilizada na cifragem.

Uma alternativa é gerar uma chave antes de cifrar e passar por parâmetro junto com a mensagem e a mesma coisa com a decifragem.

Abraço.

d34d_d3v1l

Por favor,

formate os seus posts !

utilize a tag CODE para postar códigos… É um botãozinho do lado do negrito, italico, sublinhado… Quote […]!

Abraço!!

public class Hi{
    public static void main(String[] args){
        System.out.println("HI");
    }
 
}

fica mais visível né ?

E parabens quanto a resolução ai do seu problema!
Se possível, adicione “[Resolvido]” no título do post para o pessoal saber que já
ta tudo bem…

abraços!
E agradeço se puder seguir alguma dessas ‘boa prática’

Criado 17 de março de 2005
Ultima resposta 17 de abr. de 2011
Respostas 4
Participantes 3