Saltar al contenido

Codificación Base64 “string” – línea de comandos de Windows?

Este dilema se puede tratar de variadas formas, pero nosotros te mostramos la que en nuestra opinión es la resolución más completa.

Solución:

Aquí hay una línea de PowerShell que puede ejecutar desde una consola cmd que codificará en Base64 un string.

powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("Hello world!"))"

Probablemente no sea tan rápido como la solución de npocmaka, pero podría configurar una consola macro con eso.

doskey btoa=powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("$*"))"
doskey atob=powershell "[Text.Encoding]::UTF8.GetString([convert]::FromBase64String("$*"))"

btoa Hello world!
btoa This is fun.
btoa wheeeeee!
atob SGVsbG8gd29ybGQh

Ten en cuenta que doskey no funciona en scripts por lotes, solo en la consola. Si desea usar esto en un script por lotes, cree una función.

@echo off
setlocal

call :btoa b64[0] "Hello world!"
call :btoa b64[1] "This is fun."
call :btoa b64[2] "wheeeeee!"
call :atob b64[3] SGVsbG8gd29ybGQh

set b64
goto :EOF

:btoa  
for /f "delims=" %%I in (
    'powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("%~2"))"'
) do set "%~1=%%I"
goto :EOF

:atob  
for /f "delims=" %%I in (
    'powershell "[Text.Encoding]::UTF8.GetString([convert]::FromBase64String("%~2"))"'
) do set "%~1=%%I"
goto :EOF

O si prefiere un híbrido por lotes + JScript:

@if (@[email protected]) @then
@echo off & setlocal

call :btoa b64[0] "Hello world!"
call :btoa b64[1] "This is fun."
call :btoa b64[2] "wheeeeee!"
call :atob b64[3] SGVsbG8gd29ybGQh

set b64
goto :EOF

:btoa  
:atob  
for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" %0 "%~2"') do set "%~1=%%I"
goto :EOF

@end // end batch / begin JScript hybrid code
var htmlfile = WSH.CreateObject('htmlfile');
htmlfile.write('');
WSH.Echo(htmlfile.parentWindow[WSH.Arguments(0).substr(1)](WSH.Arguments(1)));

Editar: híbrido por lotes + VBScript para @Hackoo:



    

De acuerdo con los comentarios sobre la pregunta, puede usar certutil. p.ej,

certutil -encode raw.txt encoded.txt

o

certutil -f -encode raw.txt encoded.txt

los -f significa “forzar sobrescritura”. De lo contrario, obtendrá un error si el archivo de salida (encoded.txt anterior) ya existe.

Sin embargo, esto formateará la salida en el archivo codificado.txt como si fuera un archivo PEM de certificado, completo con líneas BEGIN y END, y líneas divididas en el máximo de caracteres. Por lo tanto, necesitaría realizar un procesamiento adicional en un escenario por lotes y un poco de trabajo adicional si las cadenas son largas.

este guion puede decodificar/codificar cadenas base64 en cada máquina desde XP y superior sin necesidad de instalar .net o Internet Explorer 10/11. Incluso puede manejar símbolos especiales con escape de JavaScript:

// result is IkhlbGxvIg==
base64.bat -encode "u0022Hellou0022" -eval yes

// result is SGVsbG8=
base64.bat -encode "Hello"

Éste acepta un único argumento: el string desea codificar en base 64 e imprime el resultado (pero requiere al menos Internet Explorer 10 instalado):

@echo off

setlocal

set "string=%~1"

::echo %string%^|mshta.exe "%~f0"
for /f "delims=" %%# in ('echo %string%^|mshta.exe "%~f0"') do (
    set b64=%%#
)

set b64

endlocal&exit /b %errorlevel%




Puntuaciones y comentarios

Puedes avalar nuestra investigación exponiendo un comentario o valorándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 3.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *