Ir para conteúdo
  • Cadastre-se

dev botao

Assinar Digitalmente usando A1 ou A3


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 239 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde,

Eu preciso executar esse procedimento abaixo em Delphi, eu já possuo uma string com os valores desejados, só falta assinar digitalmente usando certificado A1 ou A3 e pegar a hash assinada.

Alguém sabe como fazer isso em Delphi? Se os componentes ACbr podem me ajudar? 

Se alguém puder me ajudar, pode me adicionar no zap (19)99639-1801 e passar um orçamento pois estou com bastante urgência!

Obrigado!

 

6.3 Geração do Hash Assinado

O conteúdo de cada campo deverá ser formatado como determinado em anexo e concatenados com o caractere “|”.

Exemplo: 1234561AB123456789012318I|CIACIACIACIACIACIACIACIACIACIACI|12345678901234|I.N.I.C.I. A.I.S.|201806281631426|620|80|50|50|50|50|50|50|1000|ASSINATURA

Do resultado da concatenação devem ser obtidos os bytes conforme a codificação UTF8.

Um hash será gerado a partir dos bytes resultantes da operação anterior.

O hash deverá ser assinado usando a chave privada da Serventia.

O hash assinado é adicionado ao final do registro.

Exemplo: 1234561AB123456789012318I|CIACIACIACIACIACIACIACIACIACIACI|12345678901234|I.N.I.C.I. A.I.S.|201806281631426|620|80|50|50|50|50|50|50|1000|n829XD4stswH7ZNx54rzOWuGYBeqw6B dtiBOaxizpkpkp3VLHTkmEKOWkXrHVeISo76RPM6SxOTZBfxkmu/kQMn8V1D99ePB4S6CQh9rH6 T5vmj1oj82ObTe8IiwO03qpoxwzOfER70tlvn4HwCi0ekNvgsvGpXekiCzweO473yeLHQutxl4Pv4FHZ YaZYsWDcr3zdDT01nBzfj3xg7LveOlaJdeAkdzsppOvdYzHwTSR+mgNgtWJAM2TAe6uHRq1ZcB6 3z0T4lw9uopWOqOwdAbu4ByKuedGyZFc2FMkC5V0N3RRapI5XjH3fQRNmOeFvZvK7qAEPruw2l NXhX/Nw==

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

Você pode usar a ACBrDFeSSL...

Veja um exemplo quase idêntico, no Projeto SATSig ( que gera a assinatura da Sw.House)

StrCodigoVinculacao := Onlynumber(edtCNPJSoftwareHouse.Text) + Onlynumber(edtCNPJCliente.Text);

memCodigoVinculacao.Text := FDFeSSL.CalcHash(StrCodigoVinculacao, dgstSHA256, outBase64, True);

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Daniel muito obrigado! 

Eu nunca usei o ACbr, vou procurar então esse componente e exemplo que você indicou!

Por acaso você me daria uma assessoria? Se você dizer esse tipo de serviço, claro, me passe um orçamento por favor. Meu contato está no primeiro post.

Obrigado novamente!

Fábio

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Humm ok... para baixar os fontes, veja esse link:

https://www.projetoacbr.com.br/fontes/

Após isso... abra o Projeto SATSign na pasta Projetos 

Acho que não precisa de consultoria... ( essa galinha já está morta ) ;)

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

20 minutos atrás, Daniel Simoes disse:

Humm ok... para baixar os fontes, veja esse link:

https://www.projetoacbr.com.br/fontes/

Após isso... abra o Projeto SATSign na pasta Projetos 

 Acho que não precisa de consultoria... ( essa galinha já está morta ) ;)

 

Já estou baixando aqui e vou estudar! Muito obrigado Daniel! 

Fábio

Link para o comentário
Compartilhar em outros sites

Bom dia Daniel, fiz a instalação do ACBr pelo ACBrInstall_Trunk2.exe no Delphi XE3.

Ao tentar compilar o projeto que você indicou (SATSign) deu o seguinte erro: 

Citar

[MSBuild Error] "0" is an invalid value for the "DebugInformation" parameter of the "DCC" task. The "DebugInformation" parameter is of type "System.Boolean".

Criei um projeto novo e copiei todos os componentes e código,  consegui compilar, mas na hora de executar disse que não encontrou as DLL'S libxml2.dlllibxmlsec.dll.

Encontrei essas DLL's no diretório \XMLSec.., copiei pro diretório do projeto..,  consegui compilar e executar o projeto, mas ele não aparece nada, não da erro, é como se o projeto abrisse e fechasse sozinho, só pisca a tela, sem nenhum erro ou mensagem.

Onde posso estar errando? 

Pergunto novamente, se você puder me assessorar por telefone ou mesmo remotamente, eu ficaria feliz em pagar por sua ajuda.

Obrigado!

Fábio

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Humm.. O SATSign é um projeto de Lazarus/FPC

Em relação ao seu projeto... creio que seja algo errado na maneira que ele foi criado... 

Você pode remover as dependências da XMLSec, ajustando o seu ACBr.Inc

Faça um projeto de um simples botão e instancie manualmente a TACBrDFeSSL 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Nesse caso provavelmente você copiou as DLLs erradas... de que pasta você pegou ? Você está compilando em 32 ou 64 bits ?

Repare que no ACBrInstall há uma opção para já copiar as DLLs

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Não mudei nada Daniel.

Eu instalei no meu Delphi XE3 pelo ACBrInstall_Trunk2.exe, porém eu instalei a versão 64bits.

Era pra ter instalado a 32bits?

Deixei as opções tudo padrão como vem no instalador, fiz somente a instalação mínima, que está marcado ACBr_Comum e ACBr_Diversos, tinha que selecionar alguma outra coisa?

É possível remover e instalar de novo?

Obrigado!

Fábio

Editado por Kym
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Se você está compilando em 64 bits, então todas as DLLs devem ser 64 bits... É mais simples trabalhar em 32 bits...

Pode ser a instalação mínima... repare que o ACBrInstall tem uma opção para remover a versão anterior do ACBr

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Reinstalei tudo em 32bits com a opção de remover a instalação antiga e parece que funcionou agora Daniel!

Consegui compilar, selecionar o certificado, etc..

Agora vou estudar o código pra ver como adaptar para minha necessidade!

Se o ACBr suprir minhas necessidades, gostaria de saber como posso contribuir de volta.

Muito obrigado novamente! 

Fábio 

Link para o comentário
Compartilhar em outros sites

  • Fundadores
4 minutos atrás, Kym disse:

Se o ACBr suprir minhas necessidades, gostaria de saber como posso contribuir de volta.

Temos o SAC... mas divulgar o ACBr na sua comunidade de usuários já nos ajuda muito... ;)

https://www.projetoacbr.com.br/forum/sac/sobre/

 

Se você for usar apenas Windows, pode ajustar o ACBr.inc para que seu executável não fique dependendo de tantas DLLs... Veja esses tópicos, para uma melhor compreensão da ACBrDFeSSL

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Daniel, agora com tudo assinado digitalmente eu preciso enviar pra um webservice.

O webservice usa oauth2, preciso me autenticar, gerar um access_token e depois enviar, tudo com POST.

To fazendo aqui usando Indy, tem alguma coisa no ACBr que ajuda nessa parte também?

Obrigado novamente meu amigo!

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Você poderia usar a ACBrHTTP, que faz encapsulamento da classes da renomada biblioteca "Synapse" (ou usar a Synapse diretamente)

Você pode ver exemplos de uso, nos fontes do ACBrConsultaCNPJ 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

31 minutos atrás, Daniel Simoes disse:

Você poderia usar a ACBrHTTP, que faz encapsulamento da classes da renomada biblioteca "Synapse" (ou usar a Synapse diretamente)

Você pode ver exemplos de uso, nos fontes do ACBrConsultaCNPJ 

Show de bola! Vou estudar o exemplo, muito obrigado novamente!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 4 anos depois...
Em 14/09/2018 at 10:23, Kym disse:

Daniel, agora com tudo assinado digitalmente eu preciso enviar pra um webservice.

O webservice usa oauth2, preciso me autenticar, gerar um access_token e depois enviar, tudo com POST.

To fazendo aqui usando Indy, tem alguma coisa no ACBr que ajuda nessa parte também?

Obrigado novamente meu amigo!

Bom dia, vc ainda tem como vc fez pra assinar um arquivo?

Link para o comentário
Compartilhar em outros sites

Bom dia Tiago, eu não assinei um arquivo, assinei uma string.

Uso o seguinte código:

      FACBrDFe := TACBrDFe.Create(Application);

      try
        FACBrDFe.Configuracoes.Geral.SSLLib             := libWinCrypt;
        FACBrDFe.Configuracoes.Certificados.NumeroSerie := certDigitalSerie;
        FACBrDFe.Configuracoes.Certificados.Senha       := certDigitalSenha;

        assinaturaDigital := FACBrDFe.SSL.CalcHash(registroAto, dgstSHA256, outBase64, True);
      finally
        FACBrDFe.Free;
      end;

Variáveis certDigitalSerie, certDigitalSenha, assinaturaDigital são todas string.

A variável registroAto contém a string que quero assinar.

Fábio

Editado por Kym
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 239 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.