OffTopic ... Base64 para Responsável Ténico

145 views
Skip to first unread message

Clei Scheid

unread,
Mar 19, 2019, 7:59:58 AM3/19/19
to UniNFE (Lista Discussão)
Bom dia Pessoal.

De acordo com a NT2018_005_v1_20 o hashCSRT é composto concatenando-se CSRT+Chave de Acesso da NF-e.
Tem 3 passos para chegar numa string de 28 caracteres.
Deram exemplo transformando a string:
696bfa2de10ce17eaee3ea8123639867c82b8a0c  (Hash SHA1 - segundo passo)
na string:
aWv6LeEM4X6u4+qBI2OYZ8grigw=  (Base64 - terceiro passo)

Consegui produzir o hash SHA1 (segundo passo) corretamente, mas a transformação para Base64 não ...
No meu programa produziu uma string com 56 caracteres, não 28
Njk2YmZhMmRlMTBjZTE3ZWFlZTNlYTgxMjM2Mzk4NjdjODJiOGEwYw==

Eu uso Delphi.
Já tentei com Delphi 6 usando Base64Enconde da uBase64.pas.
Também tentei com Delphi XE7 usando TNetEncoding.Base64.Encode da System.NetEncoding.
O resultado sempre é o mesmo de 56 caracteres ...
Alguém já passou por isso e/ou tem alguma dica?

Obrigado
Abraço

--
Clei Scheid
Geous Consultoria e Sistemas
11-4526-3924
11-99860-0622

Andre Unimake

unread,
Mar 19, 2019, 8:38:41 AM3/19/19
to uni...@googlegroups.com
Bom dia 

Tivemos dificuldades sim em converter em Base64 com 28 caracteres. Fizemos o seguinte método em C# para atender.

private static string ToBase64Hex(string value)
{
   int countChars = value.Length;
   byte[] bytes = new byte[countChars / 2];

  for(int i = 0; i < countChars; i+=2)
  {
     bytes[i / 2] = Convert.ToByte(value.Substring(i, 2), 16);
  }

  return Convert.ToBase64String(bytes);
}

Passe o valor: 696bfa2de10ce17eaee3ea8123639867c82b8a0c para a variável value do parâmetro do método. Terá como retorno a string: aWv6LeEM4X6u4+qBI2OYZ8grigw=

Atenciosamente,

--
Você recebeu essa mensagem porque está inscrito no grupo "UniNFe" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para uninfe+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para uni...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/uninfe.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/uninfe/CABvdMZmi-ZYg26BnV9E6y%3Dq1FKrmOsVR7um%2Bc%3DwEg5XiPQpi%2BA%40mail.gmail.com.
Para mais opções, acesse https://groups.google.com/d/optout.


--

Marcos VR Digital

unread,
Mar 19, 2019, 8:59:49 AM3/19/19
to uni...@googlegroups.com

Bom dia Clei, extamente isso que perguntei kkkk

 

Os valores dos cálculos não batem, basta fazer um teste na internet e o resultado será o valor que você passou

Passo 1 usar sha-1

Passo 2 usar base64

Resultado deveria ser : Njk2YmZhMmRlMTBjZTE3ZWFlZTNlYTgxMjM2Mzk4NjdjODJiOGEwYw==

E não bate com o modelo que eles passam.

 

Então eu Tb não entendi nada kkk

Marcos

--

Marcos VR Digital

unread,
Mar 19, 2019, 9:02:36 AM3/19/19
to uni...@googlegroups.com

Bom dia Andre, porque quando se faz o teste por qualquer programa na net o resultado então é outro?

Estou confuso kkk

Na net se pagar os modelos o resultado é outro

Então a SEFAZ tem alguma particularidade que não estou vendo.

Porque quando manda converter pra base64, não seria o valor todo?

Marcos

Andre Unimake

unread,
Mar 19, 2019, 10:57:43 AM3/19/19
to uni...@googlegroups.com
Olá Marcos

Ontem eu fiz o que fizeram, todos os sites que ia, retornava essa string com 40 posições. Mas foi ai que achei esse site:
https://cryptii.com/pipes/base64-to-text  

No lado esquerdo coloca o valor: aWv6LeEM4X6u4+qBI2OYZ8grigw= 
No Lado direto escolha a opção Byte, ele vai retornar esse valor: 696bfa2de10ce17eaee3ea8123639867c82b8a0c

Ou seja são os valores de acordo com a NT. 

Obs: Esse site é ao contrátrio, em vez de codificar para Base64, ele decodifca de Base64 para byte.

Dúvidas, estou à disposição.

Atenciosamente,


Para mais opções, acesse https://groups.google.com/d/optout.


--

Clei Scheid

unread,
Mar 19, 2019, 1:45:57 PM3/19/19
to UniNFE (Lista Discussão)
Boa tarde André

Obrigado pela ajuda, mas eu já tinha resolvido e fica a dica para os demais.
Dica:
Meu erro foi aplicar DIRETAMENTE a função Base64Encode (Delphi 6) ou TNetEncoding.Base64.Encode (Delphi XE7) ao hash 696bfa2de10ce17eaee3ea8123639867c82b8a0c considerando dígito por dígito dos 40 gerados no hash.
A solução foi lembrar que esse hash é um grande número hexadecimal de 20 bytes, ou seja, cada dois dígitos é que serão transformados em bytes contendo valores de 0 a 255 dessa forma 69 6b fa 2d e1 0c e1 7e ae e3 ea 81 23 63 98 67 c8 2b 8a 0c.
Transformei cada byte em string e daí sim passei como parâmetro para as funções Base64Encode, o que resultou exatamente na string dada como exemplo pela SEFAZ na NT2018_05_v1_20, ou seja, aWv6LeEM4X6u4+qBI2OYZ8grigw=

Segue print do projeto teste:
image.png

Obrigado a todos
Se alguém quiser o fonte do projeto para estudar e modificar, envio e-mail com o projeto completo em Delphi 6 ok?

Abraços



Para mais opções, acesse https://groups.google.com/d/optout.


--
Reply all
Reply to author
Forward
0 new messages