Como gerar a Hash (SHA1) para informar no campo hashEntrega do Comprovante de entrega do CTe.
Neste post, vamos analisar como preencher um dos campos do Comprovante de Entrega de CT-e, o hashEntrega.
Primeiramente, vamos entender o que é uma hash do tipo SHA1, que deve ser informada neste campo.
Na área da criptografia, SHA-1 é uma função de dispersão criptográfica (ou função hash criptográfica) projetada pela Agência de Segurança Nacional dos Estados Unidos e é um Padrão Federal de Processamento de Informação dos Estados Unidos publicado pelo Instituto Nacional de Padrões e Tecnologia (NIST).
SHA-1 produz um valor de dispersão de 160 bits (20 bytes) conhecido como resumo da mensagem. Um valor de dispersão SHA-1 é normalmente tratado como um número hexadecimal de 40 dígitos.
Por exemplo:
7fbdc307e1e2ca01d285baab5fe8cd74259d109c
Por que devemos informar essa hash no comprovante do CTe?
O campo, de nome, hashEntrega, é uma informação obrigatória para a emissão deste evento do Conhecimento de Transporte.
A finalidade dessa informação é associar um arquivo digital à comprovação de entrega de produtos associados a uma Nota Fiscal Eletrônica evitando assim, os problemas que ocorrem com o canhoto físico, como perda do documento e demora na comprovação da entrega, além de minimizar a necessidade de armazenamento de papéis e facilitar possíveis alterações no documento.
Ele é constituído da Hash (SHA1) no formato Base64 resultante da concatenação ( união ) dos seguintes dados:
Chave de acesso do CT-e + Base64 da imagem capturada da entrega
Esta imagem capturada pode ser assinatura eletrônica, da digital do recebedor, uma foto, etc.
Segundo documentação da Sefaz, devemos observar estes dois pontos:
Nota 1: A critério do autor deste evento, este campo pode ser utilizado como índice para acesso às informações do Comprovante de entrega.
Nota 2: A SEFAZ não tem nenhum controle sobre a informação deste campo. Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary
Para construirmos essa hash SHA1, a NS Tecnologia tem um exemplo, na linguagem Java, que faz a concatenação da Chave de acesso do CT-e + Base64 da imagem capturada da entrega, e gera uma hash SHA1 em base64 para ser informada neste campo do CTe.
Veja agora como utilizar o código:
Vamos utilizar a função gerarHashEntrega e informar os parâmetros chCTe ( chave de 44 dígitos do CTee ) e a base64 da imagem da entrega (imagem capturada na entrega):

Podemos informar os parâmetros da seguinte forma:

Feito isso, a função fará o seguinte trabalho:
Primeiramente ela irá concatenar as strings:

Após isso, a função irá criptografar a string e gerar a base64 para informarmos no CTe:
assim, a função retorna a string em base64, que pode ser utilizada no evento do cte:
hashEntrega: tf0LeHie3N9AdQ7eH5SVeqg44Oc=
{
"X-AUTH-TOKEN": "SEU_TOKEN_AQUI",
"chCTe": "43201207364617000135570000000112971000112978",
"tpAmb": 2,
"dhEvento": "2021-03-31T11:32:00-03:00",
"nSeqEvento": "1",
"nProt": "143200000259657",
"dhEntrega": "2021-03-31T11:32:00-03:00",
"nDoc": "36985214715",
"xNome": "NOME DE QUEM RECEBEU A ENTREGA",
"hashEntrega": "tf0LeHie3N9AdQ7eH5SVeqg44Oc=",
"dhHashEntrega": "2021-03-31T11:32:00-03:00",
"latitude": "-31.776000",
"longitude": "-52.359400",
"chavesEntregues": [
"43201188587357006604550010010421901000315147"
]
}
Para baixar o código e utilizar na sua aplicação, acesse nosso GitHub:
https://github.com/NSTecnologia/hashEntregaCTe