Olá estou fazendo um sistema bem simples, de um lado ele grava e criptografa uma senha, mas quando tento descriptografar, ocorre um erro, alguém pode me ajudar
import java.text.SimpleDateFormat;
import java.util.List;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import sun.misc.BASE64Decoder;
import br.com.caelum.DAO.ContatoDAO;
import br.com.caelum.modelo.Contato;
public class TestaLista {
public static void main(String[] args) throws Exception {
ContatoDAO dao = new ContatoDAO();
List<Contato> contatos = dao.getLista();
String dataString = "dd/MM/yyyy";
SimpleDateFormat spd = new SimpleDateFormat(dataString);
for (Contato contato : contatos){
System.out.println("Nome:" + contato.getNome());
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
SecretKey desKey = keygenerator.generateKey();
Cipher desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
desCipher.init(Cipher.DECRYPT_MODE,desKey);
byte[] strCr64 = (contato.getSenha()).getBytes();
System.out.println("aqui sai criptografada: " + new String(strCr64));
System.out.println("até aqui ok");
byte[] msgOriginal = desCipher.doFinal(strCr64);
System.out.println("aqui ñ roda");
BASE64Decoder decB64 = new BASE64Decoder();
String s = new String (msgOriginal);
byte[] msgEncryptOriginalN = decB64.decodeBuffer(s);
System.out.println("senha:" + new String(msgEncryptOriginalN));
System.out.println("email:" + contato.getEmail());
System.out.println("endereco:" + contato.getEndereco());
System.out.println("data de nascimento:" + spd.format(contato.getDataNascimento().getTime()) + "\n");
}
}
}
o erro é esse:
Nome:João Santos
aqui sai criptografada: ?���{mK
até aqui ok
Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:913)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at br.com.caelum.teste.TestaLista.main(TestaLista.java:33)