DICA: Codificar em Base64 direto do Prompt.

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

DICA: Codificar em Base64 direto do Prompt.

Mensagem por rochinha »

Amiguinhos,

Caso precise de forma rápida sem programação codificar um arquivo pelo Prompt do DOS faça uso de uma ferramenta natural do Windows.

O utilitário em questão é o certutil.exe.

Farei um teste básico com um arquivo aleatório:

certutil -unicodetext -encode compose.bat compose.b64

Resultado dentro de compose.b64:
-----BEGIN CERTIFICATE-----
QHNldCBvbGRwYXRoPSVwYXRoJQ0KDQpAc2V0IFBhdGg9QzpcUHJvZ3JhbSBGaWxl
cyAoeDg2KVxFbWJhcmNhZGVyb1xTdHVkaW9cMjIuMFxiaW47QzpcVXNlcnNcUHVi
bGljXERvY3VtZW50c1xFbWJhcmNhZGVyb1xTdHVkaW9cMjIuMFxCcGw7QzpcUHJv
Z3JhbSBGaWxlcyAoeDg2KVxFbWJhcmNhZGVyb1xTdHVkaW9cMjIuMFxiaW42NDtD
OlxVc2Vyc1xQdWJsaWNcRG9jdW1lbnRzXEVtYmFyY2FkZXJvXFN0dWRpb1wyMi4w
XEJwbFxXaW42NDtDOlxQcm9ncmFtIEZpbGVzXEVjbGlwc2UgQWRvcHRpdW1canJl
LTE4LjAuMi4xMDEtaG90c3BvdFxiaW47QzpcV2luZG93c1xzeXN0ZW0zMjtDOlxX
aW5kb3dzO0M6XFdpbmRvd3NcU3lzdGVtMzJcV2JlbTtDOlxXaW5kb3dzXFN5c3Rl
bTMyXFdpbmRvd3NQb3dlclNoZWxsXHYxLjBcO0M6XFdpbmRvd3NcU3lzdGVtMzJc
T3BlblNTSFw7QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVlMgQ29kZVxiaW47
QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgU1FMIFNlcnZlclwxMTBcVG9vbHNc
Qmlublw7QzpcUHJvZ3JhbURhdGFcY2hvY29sYXRleVxiaW47QzpcUHJvZ3JhbSBG
aWxlc1xkb3RuZXRcO0M6XFByb2dyYW0gRmlsZXNcR2l0XGNtZDtDOlxQcm9ncmFt
IEZpbGVzXEdpdFxtaW5ndzY0XGJpbjtDOlxQcm9ncmFtIEZpbGVzXEdpdFx1c3Jc
YmluO0M6XFByb2dyYW0gRmlsZXNcUG93ZXJTaGVsbFw3XDtDOlxQcm9ncmFtIEZp
bGVzXGdzdWRvXEN1cnJlbnQ7QzpcUHJvZ3JhbSBGaWxlc1xub2RlanNcO0M6XFBy
b2dyYW0gRmlsZXNcUHVUVFlcO0M6XFByb2dyYW0gRmlsZXNcRG9ja2VyXERvY2tl
clxyZXNvdXJjZXNcYmluO0M6XFByb2dyYW0gRmlsZXMgKHg4NilcV2luZG93cyBL
aXRzXDEwXFdpbmRvd3MgUGVyZm9ybWFuY2UgVG9vbGtpdFw7QzpcUHJvZ3JhbSBG
aWxlcyAoeDg2KVxXaW5kb3dzIEtpdHNcMTBcTWljcm9zb2Z0IEFwcGxpY2F0aW9u
IFZpcnR1YWxpemF0aW9uXFNlcXVlbmNlclw7QzpcUHJvZ3JhbSBGaWxlcyAoeDg2
KVxXaW5kb3dzIEtpdHNcMTBcQXNzZXNzbWVudCBhbmQgRGVwbG95bWVudCBLaXRc
RGVwbG95bWVudCBUb29sc1xBTUQ2NFxPc2NkaW1nOztDOlxQcm9ncmFtIEZpbGVz
ICh4ODYpXFdpbk1lcmdlO0M6XFByb2dyYW0gRmlsZXNcVG9ydG9pc2VTVk5cYmlu
O0M6XFByb2dyYW0gRmlsZXMgKHg4NilcRVNGRGF0YWJhc2VNaWdyYXRpb25cO0M6
XFVzZXJzXFdpblwuY2FyZ29cYmluO0M6XFVzZXJzXFdpblxBcHBEYXRhXExvY2Fs
XFByb2dyYW1zXFB5dGhvblxQeXRob24zMTJcU2NyaXB0c1w7QzpcVXNlcnNcV2lu
XEFwcERhdGFcTG9jYWxcUHJvZ3JhbXNcUHl0aG9uXFB5dGhvbjMxMlw7QzpcVXNl
cnNcV2luXEFwcERhdGFcTG9jYWxcUHJvZ3JhbXNcUHl0aG9uXExhdW5jaGVyXDtD
OlxVc2Vyc1xXaW5cQXBwRGF0YVxMb2NhbFxNaWNyb3NvZnRcV2luZG93c0FwcHM7
QzpcVXNlcnNcV2luXEFwcERhdGFcTG9jYWxcTWljcm9zb2Z0XFdpbkdldFxMaW5r
cztDOlxVc2Vyc1xXaW5cQXBwRGF0YVxSb2FtaW5nXG5wbTtDOlxVc2Vyc1xXaW5c
RG9jdW1lbnRzXFBvd2VyU2hlbGxcU2NyaXB0cztDOlxVc2Vyc1xXaW5cQXBwRGF0
YVxSb2FtaW5nXENvbXBvc2VyXHZlbmRvclxiaW47QzpcQU1QUFNcQ09NUE9TRVI7
QzpcQU1QUFNcUEhQODENCg0KY2FsbCBjb21wb3NlciBjb25maWcgLS1nbG9iYWwg
LS1hdXRoIGdpdGh1Yi1vYXV0aC5naXRodWIuY29tIGdocF9wQzVuZ2RPNG9NQkRC
VWY1eW85bU8wN3oxZ1c0RlI0Uzk2aXYNCmNhbGwgY29tcG9zZXIgdXBkYXRlIC0t
bm8tc2NyaXB0cw0KDQpAc2V0IHBhdGg9JW9sZHBhdGglDQoNCkBwYXVzZQ==
-----END CERTIFICATE-----


Agora farei o teste básico de descodificação:

certutil -decode compose.b64 compose.d64

Resultado dentro de compose.d64:
@set oldpath=%path%

@set Path=C:\Program Files (x86)\Embarcadero\Studio\22.0\bin;C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl;C:\Program Files (x86)\Embarcadero\Studio\22.0\bin64;C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\Win64;C:\Program Files\Eclipse Adoptium\jre-18.0.2.101-hotspot\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\ProgramData\chocolatey\bin;C:\Program Files\dotnet\;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\PowerShell\7\;C:\Program Files\gsudo\Current;C:\Program Files\nodejs\;C:\Program Files\PuTTY\;C:\Program Files\Docker\Docker\resources\bin;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\Windows Kits\10\Microsoft Application Virtualization\Sequencer\;C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\AMD64\Oscdimg;;C:\Program Files (x86)\WinMerge;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\ESFDatabaseMigration\;C:\Users\Win\.cargo\bin;C:\Users\Win\AppData\Local\Programs\Python\Python312\Scripts\;C:\Users\Win\AppData\Local\Programs\Python\Python312\;C:\Users\Win\AppData\Local\Programs\Python\Launcher\;C:\Users\Win\AppData\Local\Microsoft\WindowsApps;C:\Users\Win\AppData\Local\Microsoft\WinGet\Links;C:\Users\Win\AppData\Roaming\npm;C:\Users\Win\Documents\PowerShell\Scripts;C:\Users\Win\AppData\Roaming\Composer\vendor\bin;C:\AMPPS\COMPOSER;C:\AMPPS\PHP81

call composer config --global --auth github-oauth.github.com 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
call composer update --no-scripts

@set path=%oldpath%

@pause
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

DICA: Codificar em Base64 direto do Prompt.

Mensagem por developer »

Obrigado pela dica Rochinha.

Você sabe dizer se este tipo de codificação pode ser usada para arquivo XML assinado de NFe?
Ou mesmo para criação de certificados digitais?
Tem semelhança, por isso pergunto pois fiquei interessado.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

DICA: Codificar em Base64 direto do Prompt.

Mensagem por rochinha »

Amiguinhos,

developer, veja que o comando para a codificação possui uma parâmetro -unicodetext homogeneizando talvez prevendo uso de transmissão e troca de arquivos.

O unicode é o padrão universal de conversação, já o UTF-8 é multibyte e uma melhoria dele.

Se você pretende usar este utilitário para transportar seus XMLs DaquiPraLá e DeLáPraCá precisará testar.

No caso de certificados, existe a possibilidade de se criar certificados localmente, os chamados auto-assinados e tem discussão aqui mesmo no forum(Assinatura Digital de aplicativos sem OpenSSL) sobre o assunto. Mas este sertificado só poderá ser usado no Apache/AMPPS/WampServer, assinar PDF, assinar EXE, etc, mas não para NF-e/NFC-e.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

DICA: Codificar em Base64 direto do Prompt.

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

*************************
FUNCTION SalvarDoc(cFile)
*************************
*
*
LOCAL oFont, oDlg, cArq, cEncode
LOCAL cDirDoc := hb_GetEnv("USERPROFILE") + "\Documents" 

cArq := HWG_SelectFile( "Arquivos ( *.* )", "*.*", cDirDoc,"Escolha o documento para guardar." )

cEncode := hb_base64encode( hb_ZCompress(hb_memoread(cArq)) )
cSufixo := Upper( SubStr(cArq,RAt('.',cArq)+1) )

DirChange( "\MeuSistema" )

   IF Empty( cEncode )
      hwg_Msginfo("Não achou o arquivo.")
      RETURN .T.
   ENDIF
   
TravaRegistro('cx')
//hb_MemoWrit(cx->arquivo,cEncode,.F.)
cx->arquivo := cEncode
cx->sufixo := cSufixo
cx->(dbUnlock())
Hwg_msginfo("Documento salvo no banco de dados." + hb_eol() + cx->historico + hb_eol() + "Valor lcto: " + transform(cx->valor,"9999,999.99") ) 

//hwg_Shellexecute(cArq,"open",,cDirSist,1)   

RETURN cEncode
Grava PDF/PNG... base64 ZIPADO no DBF.
Gerando um relatório em HTML que depois é convertido para PDF e mostra a FOTO/Arquivo de todas as NFe/Recibo no caixa.

Pode usar:
hbrun base64.prg na linha de comando, com poucas mudanças ai no código.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

DICA: Codificar em Base64 direto do Prompt.

Mensagem por Itamar M. Lins Jr. »

Olá!
Ler guardado no DBF(PDF/PNG...) Base64. Uma NFe/Recibo(foto de um doc) de lançamentos no caixa.

Código: Selecionar todos

***************
FUNCTION DocVer
***************
*
*
LOCAL cAno := Str(Year(cx->data),4), cMes := CMonth(cx->data), hOutPut
LOCAL cNumDoc := iif(Empty(cx->controle),StrZero(cx->(RecNo()),10),cx->controle)
LOCAL cPS := hb_ps()
LOCAL cOutFIleName := cDirSist + "Documentos" + cPS + cAno + cPS + cMes + cPS + "XYZ_DOC_"+cNumDoc+"."+cx->sufixo
LOCAL cDecode := hb_ZUncompress(hb_base64Decode(cx->arquivo))
IF Empty(cDecode)
   hwg_msgstop("Arquivo não está anexado.")
   RETURN .T.
ENDIF

IF hb_vfDirExists( cDirSist + "Documentos" )
ELSE   
   IF hb_vfDirMake( cDirSist + "Documentos"  ) == 0
   ELSE   
      hwg_MsgYesNo("Sem autorização para criar diretório. Não foi salvo !")      
      RETURN .T.
   ENDIF      
ENDIF

IF hb_vfDirExists( cDirSist + "Documentos" + cPS + cAno )
ELSE   
   IF hb_vfDirMake( cDirSist + "Documentos" + cPS + cAno ) == 0
   ELSE   
      hwg_MsgYesNo("Sem autorização para criar diretório. Não foi salvo !")      
      RETURN .T.
   ENDIF      
ENDIF

IF hb_vfDirExists( cDirSist + "Documentos" + cPS + cAno + cPS + cMes )
ELSE   
   IF hb_vfDirMake( cDirSist + "Documentos" + cPS + cAno + cPS + cMes ) == 0
   ELSE   
      hwg_MsgYesNo("Sem autorização para criar diretório. Não foi salvo !")      
      RETURN .T.
   ENDIF      
ENDIF

hb_MemoWrit( cOutFileName,cDecode,.F.)
//hOutput := FCreate( '\XYZ\Documentos\' + cOutFileName )

//FWrite( hOutput, cDecode)
//FClose( hOutput )

hwg_Shellexecute(cOutFileName,"open",,cDirSist + "Documentos",1)
//wapi_shellexecute(,"Open",cOutFileName)
RETURN .T.
Zero DLL, 100% Harbour Full compatible with Android/OSX/Linux...Colocar em "ingrez", pq li numa revista há 30 anos atras que as msg em "ingrez" é coisa de profissional. rsrsrsrs

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder