Ir para conteúdo
  • Cadastre-se

Eduardo Augusto

Membros
  • Total de ítens

    8
  • Registro em

  • Última visita

1 Seguidor

Contact Methods

  • Website URL
    http://eduardoaugusto-irib.blogspot.com/

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

Eduardo Augusto's Achievements

Rookie

Rookie (2/14)

  • First Post
  • Week One Done
  • One Month Later
  • One Year In
  • Conversation Starter

Recent Badges

5

Reputação

1

Community Answers

  1. Olá, colegas. Perdoem-me pela insistência, mas será que alguém poderia me ajudar neste caso que postei no dia 14 de maio? Continuo perdido quanto à utilização da função ValidarHash: ValidarHash (StringOriginal, dgstSHA256, HashCalculado, True) Obrigado. EA
  2. Olá, Daniel. Não obtive êxito nos testes. A linha << If ValidarHash(StrOriginal, dgstSHA256, HashCalculado, True) then >> está acusando o seguinte erro "F2066 MIssing operator or semicolon". Na tentativa de encontrar uma solução, tentei usar a analogia com o método CalcHash e alterei a chamada da função ValidarHash com a inclusão de FACBrDFe.SSL.ValidarHash. FACBrDFe := TACBrDFe.Create(Application); FACBrDFe.Configuracoes.Geral.SSLLib:= libWinCrypt; FACBrDFe.Configuracoes.Certificados.NumeroSerie := '0a520aadce0d6002a3f4bab8d983568a'; If not FACBrDFe.SSL.ValidarHash(StrOriginal, dgstSHA256, HashCalculado, True) then showmessage('Ainda não estoui no caminho certo...') ; if FACBrDFe.SSL.ValidarHash(StrOriginal, dgstSHA256, HashCalculado, True) then showmessage('Deu Certo!!!! Yuuupiiii!!!!'); O código não acusou nenhum erro, mas como ainda não entendi muito bem qual deve ser o conteúdo das constantes StrOriginal e HashCalculado, só obtive o resultado "Ainda não estou no caminho certo...". Por favor, corrijam-me se eu estiver enganado: Com a função FACBrDFe.SSL.CalcHash, direcionada ao meu certificado digital A1, eu transformo uma hash composta de bytes na AssinaturaDig : INPUT/HashBytes: 3132303830383343333030303030303436303132414131393925374333303030303030343630313241413030303030303030303030303030303030302537433530333536323836303030313130253743542e642e4e2e642e432e253743323031393035313031363030303030253743333136382537433925374336313625374331363725374332313725374330363325374331353225374335323833 OUTPUT/AssinaturaDig: ogp3uJQ6oFsdo4sckxQayHGyO+NeBCkamqDfDS3fMDDPChiagxzlbwHPdNMfl7Xa8ZTSZk6/7Rw3SUptBgrO4NkQoQ5LUUDQLvOuGgS0+nUoWqq6QllVC/xYZbX+/qGUZ51CL5vLVBvOdCOMIircuMAlPlThxANEkmpE7T5rODjpFnUhWo1aDFoXJDuc7mbgkoyaKDsV81fMc38q6X9ZWZZmBdrbj5ahafN+iLFWJGsTbc7PHyPI5CGwGdQ+JqGWp2FlLbc3zCTkz3I+KFXs3Rac1fVMOcQz54wj17fLAyPAO02yHDO8+qfEvz6WQk/F165TLCPRHZVeaaip1YKMAA== Eu estou deduzindo que a função ValidarHash serve para comparar as duas strings, a de entrada (Hashbytes) com o resultado (AssinaturaDig). Ou seja, nos teste que estou fazendo (e falhando) eu estou atribuindo os seguintes valores às constantes da função ValidarHash: StrOriginal: o valor da HashBytes: 313230383038334333303030303... HashCalculado: o valor da AssinaturaDig: ogp3uJQ6oFsdo4sckxQayHGyO+... Estaria eu equivocado nesse raciocínio? E quanto ao erro que o código está acusando e ao meu abuso de alterar sua grafia? Mais uma vez agradeço pela paciência de todos. EA
  3. Valeu, Daniel. Vou testar o código e, assim que possível, eu retornarei com o resultado. EA
  4. Obrigado, Daniel, por sua sempre pronta participação. Estou meio confuso com esse assunto. Eis o conteúdo da norma que devo cumprir: De posse do registro de abertura, a Serventia: Passo 1: Calcula o hash usando a função de hash especificada no termo de abertura; Passo 2: Descriptografa o hash do registro de abertura usando a chave pública do TJ; Passo 3: Compara com o hash calculado no passo 1 com o hash obtido no passo 2. Segue anexa a imagem que ilustra essa operação. O que eu preciso é dos comandos que cumpram os 3 passos acima. Você poderia me auxiliar? Obrigado. EA
  5. Prezados amigos: Tenho a seguinte situação: Hash original: 1208083C300000046012AA199|300000046012AA000000000000000000|50356286000110|T.d.N.d.C.|201905101600000|3168|9|616|167|217|063|152|5283 Hash em Bytes (variável HashBytes) após parametrização RFC 3986 – UTF-8 (URL Encoding): 3132303830383343333030303030303436303132414131393925374333303030303030343630313241413030303030303030303030303030303030302537433530333536323836303030313130253743542e642e4e2e642e432e253743323031393035313031363030303030253743333136382537433925374336313625374331363725374332313725374330363325374331353225374335323833 Meu sistema VBA envia essa HashBytes para o aplicativo Delphi por intermédio do seguinte comando (via prompt do cmd.exe): Shell "AssinadorDelphi.exe --x-- " & HashBytes O AssinadorDelphi.exe (que consegui elaborar graças ao inestimável apoio deste maravilhoso fórum), utilizando a minha chave privada (A3 ou A1), assina essa HashBytes em SHA256. Seguem as principais linhas do código (que estão funcionando perfeitamente): Resultado obtido pelo AssinadorDelphi.exe para a variável AssinaturaDig: ogp3uJQ6oFsdo4sckxQayHGyO+NeBCkamqDfDS3fMDDPChiagxzlbwHPdNMfl7Xa8ZTSZk6/7Rw3SUptBgrO4NkQoQ5LUUDQLvOuGgS0+nUoWqq6QllVC/xYZbX+/qGUZ51CL5vLVBvOdCOMIircuMAlPlThxANEkmpE7T5rODjpFnUhWo1aDFoXJDuc7mbgkoyaKDsV81fMc38q6X9ZWZZmBdrbj5ahafN+iLFWJGsTbc7PHyPI5CGwGdQ+JqGWp2FlLbc3zCTkz3I+KFXs3Rac1fVMOcQz54wj17fLAyPAO02yHDO8+qfEvz6WQk/F165TLCPRHZVeaaip1YKMAA== Até aí, tudo perfeito! O que eu preciso agora é o seguinte: uma outra Unit que faça exatamente o inverso, ou seja, de posse dessa AssinaturaDig, preciso obter a HashBytes que a originou, com a utilização da chave pública do emitente, para que o sistema confira a sua integridade. Ao que me parece, basta substituir umas duas linhas do código. As pesquisas que fiz neste Fórum e em toda a internet só me retornaram exemplos de "validação de arquivos xml" (obviamente por ser esse o principal uso dos participantes deste fórum). No entanto, para a minha necessidade, o aplicativo terá que conferir a assinatura digital que receberei no formato acima especificado. Peço a compreensão e paciência de todos, pois não atuo na área de programação (nem sou da área de Exatas) e só soube que Delphi era uma linguagem de programação há pouco mais de 2 meses, quando aqui encontrei a solução acima descrita e que já coloquei em funcionamento. Ou seja, por mais que eu queira encontrar a solução sem atazanar a vida de ninguém, sou obrigado a admitir que não tenho condições técnicas para, no exíguo tempo que me resta para terminar a nova rotina, obter sozinho essa resposta mediante a análise das inúmeras de linhas de código de todas as fontes gentilmente disponibilizadas pela ACBr. Ficarei feliz diante de qualquer colaboração. Muito obrigado. EA
  6. Prezados amigos: Com base nas valiosas colaborações do Daniel (neste tópico) e do Kym (msg privada), consegui elaborar em Delphi a rotina para a assinatura digital da hash. A solução só não ficou perfeita pelo fato de eu não ter obtido sucesso em usar uma DLL Delphi no VBA, mas driblei o problema criando em Delphi a mesma rotina como um arquivo executável, que salva a assinatura digital em um arquivo txt , deixando ao VBA a simples missão de, poucos segundos depois de ter "provocado" a execução dessa rotina, ler automaticamente o txt por ela gerado em busca da desejada informação. Portanto, Questão Solucionada! Muito obrigado. EA
  7. Muito obrigado, Daniel. Vou, então, tentar decifrar o código por vc indicado para depois decidir se convém adaptá-lo para o VB ou se a melhor saída será aventurar-me na linguagem Delphi para poder utilizar essa função já pronta. Por favor, corrija-me se eu estiver enganado. O arquivo "ACBrDFeWinCrypt.pas" é o condigo ainda não compilado. Caso eu opte por fazer uma rotina em Delphi para utilizar esse componente, a qual arquivo deverei fazer referência? Qual a extensão (e o nome, se diverso) do arquivo pronto "utilizável" resultante desse arquivo ".pas"? EA Olá, Cleber. Conexão com um sistema específico do Tribunal de Justiça. EA
  8. Prezados amigos: Estou com uma enorme dificuldade para entender a lógica existente em uma "assinatura digital de hash" e, após muita pesquisa (muita mesmo), apenas neste Fórum senti a possibilidade de encontrar uma elucidação. Esclareço que eu não sou programador (longe disso), mas mexo com computador desde 1986 e desenvolvi um sistema em VBA-Access que funciona perfeitamente há quase 15 anos. Mas, uma recente modificação na legislação está me levando à loucura, pois, após implementar praticamente tudo, emperrei na parte final, que é a comunicação "on line" com certificação digital. Sei como assinar um arquivo qualquer com certificado A1 ou A3 e também já descobri como converter qualquer conjunto de caracteres (uma linha de texto, por exemplo) em bytes para, em seguida, obter uma hash SHA256. No entanto, não tenho a mínima ideia de como assinar uma simples linha de texto no padrão SHA256 para obter um string denominada "assinatura digital" a ser inserida no final dessa mesma linha de texto. Vejam a regra constante das normas: 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|n829XD4stswH7ZNx54rzOWuGYBeqw6BdtiBOaxizpkpkp3VLHTkmEKOWkXrHVeISo76RPM6SxOTZBfxkmu/kQMn8V1D99ePB4S6CQh9rH6T5vmj1oj82ObTe8IiwO03qpoxwzOfER70tlvn4HwCi0ekNvgsvGpXekiCzweO473yeLHQutxl4Pv4FHZYaZYsWDcr3zdDT01nBzfj3xg7LveOlaJdeAkdzsppOvdYzHwTSR+mgNgtWJAM2Tae6uHRq1ZcB63z0T4lw9uopWOqOwdAbu4ByKuedGyZFc2FMkC5V0N3RrapI5XjH3fQRNmOeFvZvK7qAEPruw2lNXhX/Nw== Meu sistema em VBA gera a string com todas as informações necessárias com o pipe (1), faz a conversão para a codificação UTF-8 (2) e a geração dos bytes resultantes da codificação UTF-8 (3), conforme abaixo exemplificado: 1234561AB123456789012318I|CIACIACIACIACIACIACIACIACIACIACI|12345678901234|I.N.I.C.I.A.I.S.|201806281631426|620|1000 1234561AB123456789012318I%7CCIACIACIACIACIACIACIACIACIACIACI%7C12345678901234%7CI.N.I.C.I.A.I.S.%7C201806281631426%7C620%7C1000 3132333435363141423132333435363738393031323331384925374343494143494143494143494143494143494143494143494143494143494143492537433132333435363738393031323334253743492e4e2e492e432e492e412e492e532e25374332303138303632383136333134323625374336323025374331303030 Falta, agora, implementar o seguinte item: "o hash deverá ser assinado usando a chave privada", mas eu não tenho a mínima ideia de como isso pode ser feito. O máximo que consegui foi transformar essa cadeia de bytes em SHA256, mas sem a utilização do certificado digital A1. 63ab9fa2e45ff9c9cae1c68e392f124c103afdccd3a7f9fdd550e3f244906af1 Estou tentando implementar isso em VBA (talvez, eu tenha que apelar para a elaboração de uma dll em VB ou C#, linguagens que ainda mal sei soletrar). No entanto, sem compreender a lógica por trás dessa "assinatura digital de hash", fica impossível seguir adiante. Alguém poderia me ajudar? Obrigado a todos. Eduardo Augusto
×
×
  • 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.

The popup will be closed in 10 segundos...