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 depaula.jau » 22 Abr 2019 11:36

Bom dia a todos

Jairo! Qual o Portal para fazer o cadastro do Responsável tecnico ?

Como vcs estão discutindo sobre , imagino que ja tenha isso em algum lugar?

Eu procurei , procurei e não encontrei ainda nada a respeito.

Abrs.
Avatar de usuário

depaula.jau
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 98
Data de registro: 15 Mai 2007 17:07
Cidade/Estado: JAU
Curtiu: 9 vezes
Mens.Curtidas: 14 vezes

SHA-1 e base64

Mensagempor Jairo Maia » 22 Abr 2019 13:57

depaula.jau, conforme a nova versão da NT 2018.005, no futuro será obrigatório para todas as UF´s. Na NT anterior falava em opção de cada UF adotar.

São Paulo declarou que não tem previsão SE ou QUANDO irá adotar o controle de responsável técnico. Trabalho com NF-e somente no estado de SP, e não tem como se cadastrar ainda em SP. No futuro (ainda não definido), e se nada mudar SP terá que adotar.

Já para quem tem emissão nos estados de AL, AM, MS, PE, PR, SC e TO está disponível nos sites de cada SEFAZ, e entra em produção em 07/05/2019.
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 JoséQuintas » 22 Abr 2019 14:16

Algumas UFs exigem o bloco, mas incompleto sem código ou se cadastrar.
Ou seja, nada desse cálculo doido.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

SHA-1 e base64

Mensagempor JoséQuintas » 22 Abr 2019 14:19

Convém lembrar que tem outras alterações que vão entrar.
Em São Paulo não entra o bloco do desenvolvedor, mas entram outras, na semana que vém.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

SHA-1 e base64

Mensagempor malcarli » 23 Mar 2023 15:46

Caro Jairo pegando carona no seu post
seria possivel com a sua rotina converter isso

"31000000OL03 00000000000120070103TNN00000000205000000000000050000002658100013167474254”
2º - Converta a cadeia de caracteres ASCII para bytes.
3º - Gere o HASH (array de bytes) utilizando SHA1.
4º - Assine o HASH (array de bytes) utilizando RSA-SHA1.
ATENÇÃO! Na maioria das linguagens de programação, os passos 3 e 4 são feitos através de uma única função. Verifique a documentação de sua linguagem para evitar assinar um hash de um hash.

Jairo Maia escreveu: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


Peguei este exemplo e tentei adaptar, mas não deu certo, é a tag assinatura da nfse de sp
/*
http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=18664
*/

#define __TESTE__
#include "minigui.ch"
#define _CAPICOM_STORE_OPEN_READ_ONLY                 0           // Somente Smart Card em Modo de Leitura

#define _CAPICOM_MEMORY_STORE                         0
#define _CAPICOM_LOCAL_MACHINE_STORE                  1
#define _CAPICOM_CURRENT_USER_STORE                   2
#define _CAPICOM_ACTIVE_DIRECTORY_USER_STORE          3
#define _CAPICOM_SMART_CARD_USER_STORE                4

#define _CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED           2
#define _CAPICOM_CERTIFICATE_FIND_SHA1_HASH           0           // Retorna os Dados Criptografados com Hash SH1
#define _CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY   6
#define _CAPICOM_CERTIFICATE_FIND_TIME_VALID          9           // Retorna Certificados Válidos
#define _CAPICOM_CERTIFICATE_FIND_KEY_USAGE           12          // Retorna Certificados que contém dados.
#define _CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE          0x00000080  // Permitir o uso da Chave Privada para assinatura Digital
#define _CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME 0           // Este atributo contém o tempo em que a assinatura foi criada.
#define _CAPICOM_INFO_SUBJECT_SIMPLE_NAME             0           // Retorna o nome de exibição do certificado.
#define _CAPICOM_ENCODE_BASE64                        0           // Os dados são guardados como uma string base64-codificado.
#define _CAPICOM_E_CANCELLED                          -2138568446 // A operação foi cancelada pelo usuário.
#define _CERT_KEY_SPEC_PROP_ID                        6
#define _CAPICOM_CERT_INFO_ISSUER_EMAIL_NAME          0
#define _SIG_KEYINFO                                  2

#include "hbclass.ch"
#ifdef __TESTE__

PROCEDURE TesteCapicom
   LOCAL cTexto, cSignatureValue, cDigestValue, cPublicKey

   cTexto    := "37925504A    00000000102620230323TNN00000000000010000000000000000002919232877058000295"
   cResult:=[NRFumPrLb8GMxh/e0UXVh8aLq6Vim6s1kbOc5AFcOFl61TlhHG6PsTJgZA+HYz2WZ9nVExmbDPffavI0qjFyxE/PZkWCAWzPzXU2DRzFKGGTUSRm4fr/g66AJZX4Ok+W70rCx3wMMKO1R1s83TXQdpcexNxFDoxhBPpUy/wQfNGfmxKZsMTRkbCjd28Dz3kpOIWNxeuQ2Wc7CV0ko631/kz3ErRDZyig2qcKg3lkpanw27pgLaDAm10EHUrurR/fsmBDnhfzU63V4z1U8iYPsbXT2j6WP6DLdaxzIBdZfiu1+dPlrTlH51fC3Uve8/T5+dUh2MT9D/cwL4g1IxR8eg==]

    msginfo(GeraAssSHA1(ctexto) == cresult)

   RETURN
#endif

FUNCTION GeraAssSHA1(sAssinatura)
LOCAL cRET:=''
LOCAL cCHA:=sAssinatura
LOCAL aRetorno
LOCAL aBytes

oStoreMem := win_oleCreateObject( "CAPICOM.Store" )
oStoreMem:open(_CAPICOM_MEMORY_STORE,'Memoria',_CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
oStoreMem:Add( pegaObjetoCertificado()  )
DadosParaAssinar := CreateObject("CAPICOM.SignedData")

// Array de Bytes
aBytes := {}
FOR i:= 1 TO LEN(cCHA)
   AADD( aBytes, ALLTRIM( STR( ASC(SUBSTR( cCHA,i,1))-48 ) ) )
NEXT
// Array de Bytes

DadosParaAssinar:content := HB_SHA1( aBytes, .T. )

oSign := CreateObject("CAPICOM.Signer")
cCHA := DadosParaAssinar:Sign(oSign,.F.,0)

msginfo(hb_Base64Encode(ccha))
msginfo(hb_Base64DEcode(ccha))
RETURN(cCHA)

function pegaObjetoCertificado()
LOCAL oStore, oCertificados, oResult := Nil, nI
Local cSerialCert    := upper([4b8db3b9d22a50b5])

        oStore := win_oleCreateObject( "CAPICOM.Store" )
  IF oStore=nIL
msginfo([erro])
     Return oResult
  ENDIF
     oStore:open(_CAPICOM_CURRENT_USER_STORE,'My',_CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
  IF oStore=nIL
msginfo([erro 1])
    Return oResult
  ENDIF

  oCertificados:=oStore:Certificates()
  FOR nI=1 TO oCertificados:Count()

        IF oCertificados:Item(nI):SerialNumber == cSerialCert
            oResult := oCertificados:Item(nI)

           EXIT
        ENDIF
  NEXT
  oCertificados := Nil
  oStore := Nil
RETURN(oResult)
malcarli
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 181
Data de registro: 20 Ago 2015 18:14
Cidade/Estado: marilia/sp
Curtiu: 81 vezes
Mens.Curtidas: 4 vezes

Anterior



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 11 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