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.
Moderador: Moderadores
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."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
/*
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)
Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes