Erro ao descriptografar

1 resposta
M

Boa tarde galera do guj.
Seguinte, eu achei um post antigo do thingol mostrando como criptografar e descriptografar usando uma senha fixa, com PBE.
Beleza, implementei aquilo, criptografou bunitinho e gravou em um arquivo.
Meu problema eh que, na “volta” que seria descriptografar as linhas que gravou antes, ao descriptografar o metodo retorna null…

Segue o codigo das variaveis utilizadas e o metodo que esta dando erro:

private static SecretKey sk;
    private static KeySpec ks;
    private static PBEParameterSpec ps;
    private static final String algorithm = "PBEWithMD5AndDES";
    private static BASE64Encoder enc = new BASE64Encoder();
    private static BASE64Decoder dec = new BASE64Decoder();

    static {
        try {
            SecretKeyFactory skf = SecretKeyFactory.getInstance(algorithm);
            ps = new PBEParameterSpec(new byte[]{3, 1, 4, 1, 5, 9, 2, 6}, 20);

            ks = new PBEKeySpec("15451064siga235".toCharArray()); // esta é a chave que você quer manter secreta.  
            // Obviamente quando você for implantar na sua empresa, use alguma outra coisa - por exemplo,  
            // "05Bc5hswRWpwp1sew+MSoHcj28rQ0MK8". Nao use caracteres especiais (como ç) para nao dar problemas.  

            sk = skf.generateSecret(ks);
        } catch (java.security.NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        } catch (java.security.spec.InvalidKeySpecException ex) {
            ex.printStackTrace();
        }
    }

...
//metodo para descriptografar a string passada por parametro
public String decrypt(String s) 
        throws  
        BadPaddingException,  
        NoSuchPaddingException,  
        IllegalBlockSizeException,  
        InvalidKeyException,  
        NoSuchAlgorithmException,  
        InvalidAlgorithmParameterException      {  
              
        final Cipher cipher = Cipher.getInstance(algorithm);  
        cipher.init(Cipher.DECRYPT_MODE, sk, ps);  
        String ret = null;  
        try {  
            ret = new String(cipher.doFinal(dec.decodeBuffer (s)));  
        } catch (Exception ex) {  
        }  
        return ret;  
    }

BufferedReader br = new BufferedReader(new FileReader(file));
                String[][] dados = new String[11][9];
                String[] colunas = new String[9];
                String linha;
                int i = 0;
                String nula = "";
                if (br.ready() == false) {
                    file.delete();
                    br.close();
                    return new DefaultTableModel();
                }

                try {
                colunas = decrypt(br.readLine()).split(",");//aqui ele traz uma exception, debugando verifiquei que 'decrypt(br.readLine())' ta retornando null
                 
                while ((linha = br.readLine()) != null) {
                    dados[i] = decrypt(linha).split(",");//aqui a mesma coisa
                    i++;
                }

por favor pessoal, se nao tiverem a solucao pra esse problema aqui, me sugiram alguma outra forma de “esconder” os caracteres, de forma que um usuario que consiga abrir o arquivo nao possa lê-lo/modifica-lo.
Desde ja agradeco a atencao de voces.

[EDIT] Ja consegui, estava gravando em um arquivo binario, ai na hora de ler o caractere especial que o arquivo binario coloca na frente fazia ler errado…

1 Resposta

jaboot

Calma velho, vamos aos possíveis passos:

1 - Você testou o decrypt? Tipo, pegar uma senha, criptografar e depois descriptografar - está funcionando?
2 - Você gravou a senha no arquivo. Tem certeza de que está lá mesmo? Confira pra ver se tem algo no arquivo.
3 - Consegue recuperar a senha (a String, a linha) de lá? Teste isso também
4 - Se conseguiu pegar a String do arquivo, tente descriptografar

Criado 19 de janeiro de 2012
Ultima resposta 19 de jan. de 2012
Respostas 1
Participantes 2