SHA-1 e base64

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

SHA-1 e base64

Mensagem por Alexandre Silva »

Pessoal
No harbour temos essas funcoes disponiveis ? sem depender de nada externo ?

SHA-1 e base64
Anexos
calculo.png
calculo.png (8.95 KiB) Exibido 3139 vezes
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

SHA-1 e base64

Mensagem por fladimir »

Sim temos

hb_sha1
hb_base64Encode
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

SHA-1 e base64

Mensagem por Alexandre Silva »

Muito obrigado.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

SHA-1 e base64

Mensagem 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.
marsp
Usuário Nível 1
Usuário Nível 1
Mensagens: 46
Registrado em: 11 Fev 2013 14:09

SHA-1 e base64

Mensagem 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.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

SHA-1 e base64

Mensagem 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.
toya
Usuário Nível 3
Usuário Nível 3
Mensagens: 157
Registrado em: 26 Jul 2004 16:51
Localização: Campo Grande/MS - Brasil
Contato:

SHA-1 e base64

Mensagem 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
Elcio Carlos
(toya)
Ahora en la version 6.5
toyasis@gmail.com (e-mail)
toyaskype (skype)
http://www.toyanet.com.br
https://www.facebook.com/profile.php?id=100009195956044

FWH 11.8+PellesC+xHarbour.org 1.2.1+SqlRDD
Clippeiro por opção, Fivewiner por amor ao Clipper...
2015 - Iniciante/Aprendiz de HMG...
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

SHA-1 e base64

Mensagem 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.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

SHA-1 e base64

Mensagem 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:

Código: Selecionar todos

cHash := CSRT + cChave
- 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:

Código: Selecionar todos

cHash := hb_base64Encode( cHash, Len( cHash ) )
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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

SHA-1 e base64

Mensagem 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...
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

SHA-1 e base64

Mensagem por Jairo Maia »

Olá Gilberto,

Reposte o link, e use o botão URL na caixa de mensagens. O link ficou quebrado.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

SHA-1 e base64

Mensagem por gilbertosilverio »

GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

SHA-1 e base64

Mensagem 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.
toya
Usuário Nível 3
Usuário Nível 3
Mensagens: 157
Registrado em: 26 Jul 2004 16:51
Localização: Campo Grande/MS - Brasil
Contato:

SHA-1 e base64

Mensagem 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

Elcio Carlos
(toya)
Ahora en la version 6.5
toyasis@gmail.com (e-mail)
toyaskype (skype)
http://www.toyanet.com.br
https://www.facebook.com/profile.php?id=100009195956044

FWH 11.8+PellesC+xHarbour.org 1.2.1+SqlRDD
Clippeiro por opção, Fivewiner por amor ao Clipper...
2015 - Iniciante/Aprendiz de HMG...
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

SHA-1 e base64

Mensagem 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."
hashCSRT.jpg

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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder