estou desenvolvendo uma aplicação para conciliação bancária para clientes do banco do Bradesco e me deparei com o seguinte problema, os arquivos de retorno do sistema do Bradesco vem todos criptografados. Alguém já trabalhou com a remoção de criptografia dos arquivos de retorno do bradesco? Agradeço a ajuda.
import br.com.bradesco.webta.security.crypto.WEBTACryptoUtil;
import br.com.bradesco.webta.security.crypto.WEBTAInputStream;
import br.com.bradesco.webta.security.exception.CryptoException;
import br.com.bradesco.webta.security.exception.ParameterException;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Descriptografia {
private WEBTAInputStream leitor;
private byte[] bufDecripto= null;;
private FileWriter arquivo;
public void descriptografar() {
File arquivo_chave=new File("criptografia201312101113.bin");
try{
//chave que será utilizada como parâmetro nos métodos de Criptografia e Descriptografia
byte[] chave= WEBTACryptoUtil.decodeKeyFile(arquivo_chave, "XXXXXX");
//Cria objeto para ler o arquivo criptografado recebe(nome do arquivo, pasta do arquivo e chave de criptografia)
leitor = new WEBTAInputStream("500_CB041200.RET", "NetBeansProjects/CriptografiaBradesco", chave);
if(leitor == null){
System.out.println("Erro");
}
while(leitor.read(bufDecripto)>0){
arquivo = new FileWriter(new File("Arquivo.txt"));
arquivo.write(bufDecripto.toString());
arquivo.close();
}
} catch (ParameterException ex) {
Logger.getLogger(Descriptografia.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Descriptografia.class.getName()).log(Level.SEVERE, null, ex);
} catch (CryptoException ex) {
Logger.getLogger(Descriptografia.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
O erro que aparece é esse:
Exception in thread “main” java.lang.NullPointerException
at br.com.bradesco.webta.security.crypto.WEBTAInputStream.read(WEBTAInputStream.java:427)
at teste.Descriptografia.main(Descriptografia.java:38
Java Result: 1
Já tentei isso, mas quando inicializo com bufDecripto= new byte[2058]; , recebo o seguinte erro:
Fev 27, 2014 9:04:27 AM teste.Descriptografia main
Grave: null
java.io.IOException: Encrypted file has invalid format. LL field is invalid.
at br.com.bradesco.webta.security.crypto.WEBTAInputStream.readNextBlockOfFile(WEBTAInputStream.java:309 )
at br.com.bradesco.webta.security.crypto.WEBTAInputStream.read(WEBTAInputStream.java:388 )
at br.com.bradesco.webta.security.crypto.WEBTAInputStream.read(WEBTAInputStream.java:427 )
at teste.Descriptografia.main(Descriptografia.java:40 )
Não tem nenhum código cliente, esse é código que o próprio Bradesco disponibiliza para o desenvolvedor que deseja realizar integração com o sistema deles. Essas funções estão no manual que eles disponibilizam, porém não consigo fazer funcionar. A única informação do cliente que teria nesse código é a senha que eu mudei por XXXXXX.
Veja o código que fiz amigo, o único problema que estou tendo é quanto a gravação dos bytes em arquivo pois aparece algum lixo no meio do arquivo e ainda nao achei a solução.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package criptografiabradesco;
import br.com.bradesco.webta.security.crypto.WEBTACryptoUtil;
import br.com.bradesco.webta.security.crypto.WEBTAInputStream;
import br.com.bradesco.webta.security.exception.CryptoException;
import br.com.bradesco.webta.security.exception.ParameterException;
import java.awt.FileDialog;
import java.awt.Frame;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileWriter;
/**
*
* @author glauber
*/
public class CriptografiaBradesco {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
FileDialog abrearquivo,fechaArquivo;
//Informa o arquivo onde será gravado o resultado
fechaArquivo = new FileDialog(new Frame(),"Salvar Arquivo",FileDialog.SAVE);
abrearquivo = new FileDialog(new Frame(),"Abrir Arquivo para Descriptografia",FileDialog.LOAD);
abrearquivo.setVisible(true);
//Para Gravar o arquivo
fechaArquivo.setVisible(true);
WEBTAInputStream wis = null;
byte[] bufDecripto = new byte[8192];
int bytesLidos = 0;
try{
//Obtem chave de criptografia
byte[] chaveCripto = WEBTACryptoUtil.decodeKeyFile(new
File("chave.bin"), "12345647789");
//Cria objeto para ler o arquivo criptografado
wis = new WEBTAInputStream(abrearquivo.getFile(), "D:/", chaveCripto);
//é lido, descriptografado, descomprimido e armazenado em bufDecripto.
//Este loop e´executado enquanto houver dados para leitura
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fechaArquivo.getFile())))
{
while((wis.read(bufDecripto))>0)
{
//Gravação dos dados do buffer no arquivo
bos.write(bufDecripto); //Gravamos os bytes lá
bos.flush();
}
bos.close();
}
} catch (ParameterException | IOException | CryptoException e){
//Efetua tratamento da excecao
System.out.println (e.getMessage());
} finally {
if (wis != null) {
try {
wis.close();
} catch (IOException e){
//Efetua tratamento da excecao
System.out.println (e.getMessage());
}
}
}
}
}
[quote=mrglauber]Veja o código que fiz amigo, o único problema que estou tendo é quanto a gravação dos bytes em arquivo pois aparece algum lixo no meio do arquivo e ainda nao achei a solução.
[/quote]
Já verificou se o lixo que aparece é algo que deveria ter sido decriptografado ou não. Outras partes do arquivo estão ok?
PS: só agora que vi, este tópico já deve ter sido resolvido…