Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

mota3263

SAFT-Openssl

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Carlos Antunes

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

è mesmo disto que estou á procura para MSACCESS

Desde já obrigado

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.