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.
SHA-1 e base64
Moderador: Moderadores
- depaula.jau
- Usuário Nível 2

- Mensagens: 98
- Registrado em: 15 Mai 2007 17:07
- Localização: JAU
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
SHA-1 e base64
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.
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)
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)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SHA-1 e base64
Algumas UFs exigem o bloco, mas incompleto sem código ou se cadastrar.
Ou seja, nada desse cálculo doido.
Ou seja, nada desse cálculo doido.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SHA-1 e base64
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.
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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
SHA-1 e base64
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.
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.
Peguei este exemplo e tentei adaptar, mas não deu certo, é a tag assinatura da nfse de spJairo 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."
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
Código: Selecionar todos
/*
https://pctoledo.org/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)
