Contribua

Doação

sábado, 28 de setembro de 2019

Codigo Java como gerar uma assinatura digital, para assinar um arquivo.


O objetivo deste artigo e demonstrar como gerar uma assinatura digital, para assinar um arquivo.
Para tanto vamos precisar de um par de chaves um Privada e Outra Publica.
Com a chave Privada assinamos e criptografar-mos o documento, esta chave como o nome diz e privada e não pode ser revelada, para que o destinatário possa abrir o documento e comprovar a autoria do mesmo verificando o mesmo e validando a assinatura enviamos a chave Publica, desse modo poderemos enviar a mesma chave para diversos destinatários, desse modo somente quem possuir a chave publica poderá poderá abrir e validar a assinatura.

Podemos criar uma par de chaves de varias maneiras, pelo shell do linux, sites softwares etc, o JAVA e muito utilizado em aplicações WEB para esses fim, e possui muitas classes para criar chaves encriptografar ler arquivos de diversos formatos, e também possui um tipo de dado para chaves.
Algumas classes utilizadas para criptografia criação de Chaves e validação de assinaturas:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;

Para criarmos uma assinatura digital precisamos de uma instância da classe java.security.Signature. Para isso podemos chamar o metodo Signature.getInstance(), com seus devidos parâmetros de algoritimos e Provedor, neste exemplo esta sendo utilizado o algotirimo SHAcithDSA e o provedor SUN.

Antes utilizarmos o objeto Signature para iniciar com a PrivateKey, no exemplo também e demonstrado como se obter a PrivateKey, e iniciaremos a assinatura chamando com o método initSign().

Agora já estamos aptos a gerar uma Assinatura Digital. Dentro do arquivo que pretendemos assinar, para isso temos trabalhar com dados tipo Byte[], usamos o método Files.readALLBytes().

E então para assinar digitalmente o documento, temos que atualizar-lo, isso se fazer com o método update() passamos os bytes para a Signature, e para gerar a assinar no documento fechamos com o método sign() , este método retorna uma array de bytes da assinatura.

Exemplo de Código:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.*;

public class GenerateDigitalSignature {
    public static void main(String[] args) {
        try {
            // Get instance and initialize a KeyPairGenerator object.
            KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
            keyGen.initialize(1024, random);

            // Get a PrivateKey from the generated key pair.
            KeyPair keyPair = keyGen.generateKeyPair();
            PrivateKey privateKey = keyPair.getPrivate();

            // Get an instance of Signature object and initialize it.
            Signature signature = Signature.getInstance("SHA1withDSA", "SUN");
            signature.initSign(privateKey);

            // Supply the data to be signed to the Signature object
            // using the update() method and generate the digital
            // signature.
            byte[] bytes = Files.readAllBytes(Paths.get("ENDEREÇO DO "));
            signature.update(bytes);
            byte[] digitalSignature = signature.sign();

            // Save digital signature and the public key to a file.
            Files.write(Paths.get("signature"), digitalSignature);
            Files.write(Paths.get("publickey"), keyPair.getPublic().getEncoded());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}




Programa exempo para consulta em bd Mysql com programa C

#include<stdio.h> #include<mysql/mysql.h> # ...