Firmar los Datos

Ahora que ya hemos creado una clave pública y una clave privada, estamos listos para firmar los datos. En este ejemplo firmaremos los datos contenidos en un fichero. GenSig obtiene el nombre del fichero desde la línea de comandos. Una firma digital se crea o se verifica usando un ejemplar de la clase Signature.

Firmar los datos, generar una firma digital para esos datos se hace con los siguientes pasos:

Obtener el Objeto Signature:

Con esto obtenermos un objeto Signature para generar o verificar firmas usando el algoritmo DSA, el mismo argumento con el que el programa generó las claves en el paso anterior, Generar las Claves Pública y Privada.
Signature dsa = Signature.getInstance("SHA1withDSA", "SUN"); 

Nota: cuando se especifica el nombre del algoritmo de firma, también deberíamos incluir el nombre del algoritmo de mensaje usado por el algoritmo de la firma. SHA1withDSA es una forma de especificar el algoritmo de firma DSA con el algoritmo de mensaje SHA-1.

Inicializar el Objeto Signature

Antes de que el objeto Signature pueda usarse para firmar o verificar, debe ser inicializado. El método de inicialización para firmas requiere una clave privada. Usamos la clav eprivada situada dentro del objeto PrivateKey llamado priv en el paso anterior:
dsa.initSign(priv);

Suministrar el Objeto Signature a los Datos a Firmarthe Data to Be Signed

Este programa usa los datos desde un fichero cuyo nombre está especificado como primer (y único) argumento de la línea de comandos. El programa leerá los datos en un buffer una vez y los suministrará al objeto Signature llamando al método update:
FileInputStream fis = new FileInputStream(args[0]);
BufferedInputStream bufin = new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) {
    len = bufin.read(buffer);
    dsa.update(buffer, 0, len);
};
bufin.close();

Generar la Firma

Una vez que se le han suministrado todos los datos al objeto Signature, podmeos generar la firma digital de los datos:
byte[] realSig = dsa.sign();

Ozito