Criptografia / Decriptografia

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.

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.

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

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.

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’