Boa tarde;
No meu sistema, eu crio um documento com o jasper report, guardo ele em uma pasta do meu computador, o que eu preciso, é ter certeza de que ele foi assinado digitalmente, eu fiz o código pra ele assinar, e aparentemente ele funciona, só que eu queria que no documento, em alguma parte dele, mostrasse que o documento foi assinado, tem como fazer isso ? e se não tiver, como eu posso atestar que ele foi assinado digitalmente ?
Meu código que faz a assinatura:
package br.com.ufpr.es.modelo;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.SignatureException;
public class Remetente {
private PublicKey pubKey;
public PublicKey getPubKey() {
return pubKey;
}
public void setPubKey(PublicKey pubKey) {
this.pubKey = pubKey;
}
public byte[] geraAssinatura(byte[] mensagem) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
Signature sig = Signature.getInstance("DSA");
// Geração das chaves públicas e privadas
KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
SecureRandom secRan = new SecureRandom();
kpg.initialize(512, secRan);
KeyPair keyP = kpg.generateKeyPair();
this.pubKey = keyP.getPublic();
PrivateKey priKey = keyP.getPrivate();
// Inicializando Obj Signature com a Chave Privada
sig.initSign(priKey);
// Gerar assinatura
sig.update(mensagem);
byte[] assinatura = sig.sign();
return assinatura;
}
}
package br.com.ufpr.es.modelo;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
public class Destinatario {
public void recebeMensagem(PublicKey pubKey, byte[] mensagem, byte[] assinatura) throws
NoSuchAlgorithmException, InvalidKeyException, SignatureException {
Signature clientSig = Signature.getInstance("DSA");
clientSig.initVerify(pubKey);
clientSig.update(mensagem);
if (clientSig.verify(assinatura)) {
//Mensagem corretamente assinada
System.out.println("A Mensagem recebida foi assinada corretamente.");
} else {
//Mensagem não pode ser validada
System.out.println("A Mensagem recebida NÃO pode ser validada.");
}
}
}
método no main
public void assinarDocumento() throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
Remetente remetenteAssiDig = new Remetente();
File arquivo = new File(enderecoArquivo);
byte[] mensagem = new byte[(int) arquivo.length()];
//gerar assinatura
byte[] assinatura = remetenteAssiDig.geraAssinatura(mensagem);
//armazena chave pública
PublicKey pubKey = remetenteAssiDig.getPubKey();
//Envia dados ao destinatário
Destinatario destinatarioAssiDig = new Destinatario();
destinatarioAssiDig.recebeMensagem(pubKey, mensagem, assinatura);
}