Ir para o conteúdo
mota3263

SAFT-Openssl

Mensagens Recomendadas

mota3263

Tenho uma aplicação de Gestão Comercial em Ms Access com a primeira versão do SAFT, efectuei um pequeno exemplo da segunda versão, que é um pouco lento na execução. Agradeço contributos para a melhorar.

Observações: Estou a falar concretamente da geração do HASH, e informo que sou amador, pois trabalho em contabilidade e a Aplicação é acima de tudo um hobbi, e uma ajuda preciosa no registo backend na Contabilidade.

Option Compare Database
'*** Biblioteca para fazer uma pausa "Slepp"
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub cmd4_Click()
'***Inicio do processo
DoCmd.Hourglass True
pbSAFT.value = 0

Dim strPath As String
strPath = CurrentProject.Path

Dim openSSLpath As String
openSSLpath = strPath & "\openssl.exe"

Dim strDados As String
strDados = txtChave
Dim FicheiroSaida As Integer
FicheiroSaida = FreeFile()
'*** Exporta os dados a assinar
Open strPath & "\RegistoBD.txt" For Output As #FicheiroSaida
	Do While Not EOF(FicheiroSaida)
	'Obtém os dados da linha
	Print #FicheiroSaida, strDados
	Loop
Close #FicheiroSaida
pbSAFT.value = 10
'*** Termina o processo de exportação

Dim intFile As Integer
'*** Cria o ficheiro Batch
intFile = FreeFile()
Open strPath & "\GeraHash.bat" For Output As #intFile
	'Posiciona-se no directório da Aplicação
	Print #intFile, strPath
	'Gera a Chave Privada
	Print #intFile, strPath & "\openssl genrsa -out " & strPath & "\ChavePrivada.pem 1024"
	'Gera a Chave Publica com base na Chave Privada
	Print #intFile, strPath & "\openssl rsa -in " & strPath & "\ChavePrivada.pem -out " & strPath & "\ChavePublica.pem -outform PEM -pubout"
	'Verifica a Chave Publica
	Print #intFile, strPath & "\openssl rsa -in " & strPath & "\ChavePublica.pem -noout -text -pubin"
	'Assina o registo da base de dados
	Print #intFile, strPath & "\openssl dgst -sha1 -sign " & strPath & "\ChavePrivada.pem -out " & strPath & "\RegistoSHA1.txt " & strPath & "\RegistoBD.txt"
	'Faz o encoding para a base 64 do registo da base de dados
	Print #intFile, strPath & "\openssl enc -base64 -in " & strPath & "\RegistoSHA1.txt -out " & strPath & "\RegistoB64.txt -A"
	'Confirmação da validade da assinatura
	Print #intFile, strPath & "\openssl dgst -sha1 -verify " & strPath & "\ChavePublica.pem -signature " & strPath & "\RegistoSHA1.txt " & strPath & "\RegistoBD.txt"
Close #intFile
'*** Termina o processo do ficheiro Batch
pbSAFT.value = 70
'*** Executa o ficheiro Batch
Dim str As String
str = strPath & "\GeraHash.bat"
Dim varBatch As Variant
varBatch = Shell(str, vbMinimizedNoFocus)
pbSAFT.value = 80
'*** Faz uma pausa de 7 segundos para concluir o registo dos dados
Sleep 7000
'*** Importa os dados já com o encoding 64
Dim CtrlFicheiro As Integer
Dim strLinha As String
CtrlFicheiro = FreeFile()
Open strPath & "\RegistoB64.txt" For Input As #CtrlFicheiro
	'***Do While Not EOF(CtrlFicheiro)
	'Obtém os dados da linha
	Line Input #CtrlFicheiro, strLinha
	txtBase64 = strLinha
	'***Loop
Close #CtrlFicheiro
pbSAFT.value = 90
'*** Termina o processo de importação
'*** Apaga os ficheiros criados durante o processo
Set fs = CreateObject("Scripting.FileSystemObject")
fs.deletefile strPath & "\RegistoBD.txt"
fs.deletefile strPath & "\GeraHash.bat"
fs.deletefile strPath & "\ChavePrivada.pem"
fs.deletefile strPath & "\ChavePublica.pem"
fs.deletefile strPath & "\RegistoSHA1.txt"
fs.deletefile strPath & "\RegistoB64.txt"
pbSAFT.value = 100
'***Fim do processo
DoCmd.Hourglass False
MsgBox "Processo de de assinatura concluido com sucesso.", vbInformation, ":: SGAI ::"
End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mota3263

A Aplicação que citei no tópico anterior serve acima de tudo para processar avenças mensais por processamento automático, daí a minha questão do tempo que demora a processar um registo, pelo que em muitos registos será concerteza um processo algo moroso, ou seja, o que se processa no tópico anterior é o seguinte:

2010-05-18;2010-05-18T11:22:19;FAC 001/14;3.12;

e que resulta em:

LPLq6dRbnycXTBpiYbeYzQwH7K1JQm3fw5HDRBcOW+ED5PIws1X6XWLePmLZO6ks/azXPk6KwnWNLQVPHsvNYO5PLOmxXRXeHXtWLlof9Zbl2Zx5Hmm4yKDI7zARPiZZ68vf5rF+tq9sMPVb8Cfz2htkZlHNdW6jY5JHd8U8sek=

Que penso será o que tem de ficar registado na base de dados e o que será submetido posteriormente no Portal das finanças, isto segundo a versão mais recente do SAFT.

Agradeço contribuições

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mota3263

Agradeço desde a contribuição de todos os tópicos relacionados com o SAFT e a certificação de software, pois consegui com esta base, com alguns melhoramentos resolver as duas questões com processos simples e gratuitos, mas acima de tudo tenho de agradecer ao PORTAL DAS FINANÇAS, que na minha opinião disponibilizou informação que permite a programação necessária para a resolução da geração do SAFT e do envio dos outputs necessários, mesmo com aplicações que alguns consideram tacanhas como o "Ms Access".

Mais uma vez o meu obrigado pela participação de todos pelas contribuições disponibilizadas nos diversos tópicos ao dispor no Portal.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carlos Antunes

se me pudesse disponibilizar um exemplo agradecia imenso ::::::)

è mesmo disto que estou á procura para MSACCESS

Desde já obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carlosAl

Alguem sabe como guardar a variavel que se encontra no ficheiro chavePrivada.pem, e executar o comando de openSSL a partir da variavel ?

Print #intFile, strPath & "\openssl dgst -sha1 -sign " & strPath & "\ChavePrivada.pem -out " & strPath & "\RegistoSHA1.txt " & strPath & "\RegistoBD.txt"

obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.