Página 1 de 2
SHA-1 e base64
Enviado: 04 Mar 2019 11:55
por Alexandre Silva
Pessoal
No harbour temos essas funcoes disponiveis ? sem depender de nada externo ?
SHA-1 e base64
SHA-1 e base64
Enviado: 04 Mar 2019 16:07
por fladimir
Sim temos
hb_sha1
hb_base64Encode
SHA-1 e base64
Enviado: 04 Mar 2019 16:49
por Alexandre Silva
Muito obrigado.
SHA-1 e base64
Enviado: 06 Mar 2019 10:42
por Mario Mesquita
Bom dia, amigos.
Essa função Base64 funciona bem com um arquivo externo?
Preciso converter um arquivo PDF para exportar dentro de um XML, com essa conversão.
Sds,
Mario.
SHA-1 e base64
Enviado: 19 Mar 2019 14:34
por marsp
Boa tarde,
O Fladimir disse que para o harbour existe o hb_base64ENCODE para converter para Base64. E para o x-harbour, existe uma função equivalente. Testei esta (hb_base64ENCODE) e não funcionou.
Obrigado.
SHA-1 e base64
Enviado: 22 Mar 2019 12:46
por Kapiaba
Bom tarde, alguém poderia por favor, postar um exemplo simples, de como se calcula o "hashCSRT" ?
Quero calcular por exemplo:
CSRT: G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO
Chave de Acesso: 41180678393592000146558900000006041028190697
Obg. abs.
SHA-1 e base64
Enviado: 22 Mar 2019 16:42
por toya
atendendo ao pedido:
Código: Selecionar todos
function NFe_CSRT()
// #toya: 01/02/2019 - 15:23:23 - bnpx_gxn-2019 - Release .001.001
local Result := .t.
local cIdCSRT := ""
local cCSRT := ""
local cChaveNFe := ""
local cHashCSRT := ""
// Identificador do CSRT utilizado para montar o hash do CSRT
cIdCSRT := "01"
// O CSRT será um código alfanumérico (de 16 a 36 bytes) de conhecimento apenas
// da SEFAZ do emitente e da empresa responsável pelo sistema emissor de DFe.
// O conceito é bastante similar ao código CSC da NFCe
cCSRT := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO" //
cChaveNFe := "41180678393592000146558900000006041028190697"
// O hashCSRT é o resultado da função hash (SHA-1 – Base64) do CSRT fornecido pelo fisco mais a Chave de Acesso da NFe.
cHashCSRT := hb_sha1( cCSRT + cChaveNFe )
return Result
Dados acima ficticios
SHA-1 e base64
Enviado: 25 Mar 2019 09:59
por Kapiaba
Dear Toya, acho que está faltando alguma coisa na sua função ou o Oscar não está sabendo fazer. Mira aqui, porfa:
http://fivewin.com.br/index.php?/topic/ ... -xharbour/
Obg. Abs.
SHA-1 e base64
Enviado: 25 Mar 2019 11:58
por Jairo Maia
Olá Pessoal,
Tentei montar essa chave usando Harbour, e usando várias CodePages, usando os exemplos que estão na NT 2018.005. Não consegui obter os resultados que está lá da tag <hashCSRT>. Mas não sei se aquele resultado é fictício.
Kapiaba, seguindo o manual e os dados de seu exemplo, entendo que seria isso:
CSRT := G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO
cChave := 41180678393592000146558900000006041028190697
- Passo 1: Concatenar o CSRT com a chave de acesso da NF-e/NFC-e que está sendo emitida:
- Passo 2: Aplicar o algoritmo SHA-1 sobre o resultado da concatenação do passo 1:
Código: Selecionar todos
cHash := Hb_SHA1( cHash, .t. ) // o segundo parãmetro deve ser .T. (Raw) e retorna uma string com 20 bytes.
- Passo 3: Converter o resultado do passo anterior para Base64, resultando em uma string de 28 caracteres:
retorna uma string com 28 caracteres, mas diferente do manual. Aqui sempre termina com 1 ou 2 sinais de igual dependo da combinação CSRT e Chave. Não sei se isso está correto, e tentei com várias codepages, nem sei se também faz diferença.
SHA-1 e base64
Enviado: 25 Mar 2019 14:20
por gilbertosilverio
Ola Jairo,
No grupo do UNINFE, teve uma discussão sobre isso da uma pesquisada la por:
[uninfe] OffTopic ... Base64 para Responsável Ténico
https://groups.google.com/d/msgid/uninf ... rce=footer
Da uma olha e ve se te ajuda...
SHA-1 e base64
Enviado: 25 Mar 2019 15:43
por Jairo Maia
Olá Gilberto,
Reposte o link, e use o botão URL na caixa de mensagens. O link ficou quebrado.
SHA-1 e base64
Enviado: 25 Mar 2019 16:16
por gilbertosilverio
SHA-1 e base64
Enviado: 25 Mar 2019 16:48
por Kapiaba
Dear Jairo Maia, many thanks, com seu exemplo, problema foi resolvido no tópico do Fivewin Brasil.
Grande Jairo Maia, muito obrigado.
Abs.
SHA-1 e base64
Enviado: 25 Mar 2019 17:25
por toya
ajustado:
Código: Selecionar todos
function NFe_CSRT()
local Result := .t.
local cIdCSRT := ""
local cCSRT := ""
local cChaveNFe := ""
local cHashCSRT := ""
local cBase64 := ""
cIdCSRT := "01"
cCSRT := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"
cChaveNFe := "41180678393592000146558900000006041028190697"
cHashCSRT := hb_sha1( cCSRT + cChaveNFe )
msg_OK_titulo( 'cIdCSRT := "01"' + CRLF + 'cCSRT := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"' + CRLF + 'cChaveNFe := "41180678393592000146558900000006041028190697"' + CRLF + 'cHashCSRT := hb_sha1( cCSRT + cChaveNFe )', "Hash do Código de Segurança do Responsável Técnico (CSRT)" )
cBase64 := HB_Base64Encode( HexToSTr( cHashCSRT ), 20 )
msg_OK_titulo( "<idCSRT>01</idCSRT>" + CRLF + "<hashCSRT>" + cBase64 + "</hashCSRT>", "Hash do Código de Segurança do Responsável Técnico (CSRT)" )
return Result
SHA-1 e base64
Enviado: 21 Abr 2019 12:27
por Jairo Maia
Olá Pessoal,
Entre outras coisas, a versão 1.20 da NT 2018.005 também corrigiu o exemplo de como gerar a tag hashCSRT. Agora funciona exatamente como está no manual. Poderiam ter feito a coisa certa antes, pouparia muito tempo de muita gente:
NOTA: No exemplo da NT onde se lê: "
resultando em uma string de 28 caracteres (20 bytes)", leia: "
Só na cabeça do ENCAT 28 caracteres tem 20 bytes."

Código: Selecionar todos
Function Main()
Clear Screen
cHash := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"
cChave := "41180678393592000146558900000006041028190697"
/*
Passo 1: Concatenar o CSRT com a chave de acesso da NF-e/NFC-e
*/
cHash := cHash + cChave
?
? "Resultado passo 1: cHash + cChave:", cHash
/*
Passo 2: Aplicar o algorítmo SHA1 resultando em uma string de 40 caracteres em Hexadecimal:
*/
cHash := Hb_SHA1( cHash, .F. ) // se usar o segundo parâmetro como .T. (raw), elimine o passo 2A
?
? "Resultado passo 2 SHA1:", cHash
/*
Passo 2A: Passar Hexadecimal para String (usei assim apenas para entender o exemplo).
Se usar no passo acima dessa forma: cHash := Hb_SHA1( cHash, .T. ), elimene essa etapa.
*/
cHash := HexToStr( cHash )
?
? "Resultado passo 2A (Hex para Str):", cHash
/*
Passo 3: Passar o resultado anterior para Base 64, resultando numa string de 28 bytes:
*/
cHash := hb_base64Encode( cHash, Len( cHash ) )
cHash := StrTran( cHash, Hb_EOL() ) // sem quebra de linha (se der erro na validação, não use StrTran())
?
? "Resultado passo 3 (<hashCSRT> em Base 64):", cHash
?
? "Bingo: Agora o exemplo da NT esta certo..: aWv6LeEM4X6u4+qBI2OYZ8grigw="
?
Return Nil