Clipper On Line • Ver Tópico - SHA-1 e base64

SHA-1 e base64

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

Moderador: Moderadores

 

SHA-1 e base64

Mensagempor Alexandre Silva » 04 Mar 2019 11:55

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

SHA-1 e base64
Anexos
calculo.png
calculo.png (8.95 KiB) Visualizado 2149 vezes
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

SHA-1 e base64

Mensagempor fladimir » 04 Mar 2019 16:07

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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

SHA-1 e base64

Mensagempor Alexandre Silva » 04 Mar 2019 16:49

Muito obrigado.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

SHA-1 e base64

Mensagempor Mario Mesquita » 06 Mar 2019 10:42

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.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

SHA-1 e base64

Mensagempor marsp » 19 Mar 2019 14:34

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.
marsp
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 43
Data de registro: 11 Fev 2013 13:09
Curtiu: 2 vezes
Mens.Curtidas: 3 vezes

SHA-1 e base64

Mensagempor Kapiaba » 22 Mar 2019 12:46

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.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

SHA-1 e base64

Mensagempor toya » 22 Mar 2019 16:42

atendendo ao pedido:

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...
toya
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 26 Jul 2004 16:51
Cidade/Estado: Campo Grande/MS - Brasil
Curtiu: 4 vezes
Mens.Curtidas: 11 vezes

SHA-1 e base64

Mensagempor Kapiaba » 25 Mar 2019 09:59

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/28039-c-para-xharbour/

Obg. Abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

SHA-1 e base64

Mensagempor Jairo Maia » 25 Mar 2019 11:58

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

- Passo 2: Aplicar o algoritmo SHA-1 sobre o resultado da concatenação do passo 1:
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:
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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

SHA-1 e base64

Mensagempor gilbertosilverio » 25 Mar 2019 14:20

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
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

SHA-1 e base64

Mensagempor Jairo Maia » 25 Mar 2019 15:43

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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

SHA-1 e base64

Mensagempor gilbertosilverio » 25 Mar 2019 16:16

gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

SHA-1 e base64

Mensagempor Kapiaba » 25 Mar 2019 16:48

Dear Jairo Maia, many thanks, com seu exemplo, problema foi resolvido no tópico do Fivewin Brasil.

Grande Jairo Maia, muito obrigado.

Abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

SHA-1 e base64

Mensagempor toya » 25 Mar 2019 17:25

ajustado:

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...
toya
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 26 Jul 2004 16:51
Cidade/Estado: Campo Grande/MS - Brasil
Curtiu: 4 vezes
Mens.Curtidas: 11 vezes

SHA-1 e base64

Mensagempor Jairo Maia » 21 Abr 2019 12:27

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


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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro