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…