I need to use a command line on Windows OS to generate the base64 data of a specific file on the screen (without generating a file).
I have see that on Unix system is sufficient to use
cat <file_name>| base64
to obtain the file's contents encoded as base64.
On Windows I'm not able to have the same result.
I have found this solution:
certutil -encode -f <file_name> tmp.b64 && findstr /v /c:- tmp.b64 && del tmp.b64
But this needs the system to generate a temporary file and so, at the end, go to destroy it.
With just the certutil command, the result on the screen is contaminated by 3 lines which contain unrelated information.
Could someone help me to provide a command on Windows that produces only the base64 data?
UPDATE: I have improved the result on the screen, by this new version of the command:
certutil -encode -f <file_name> tmp.b64 && cls && findstr /v /c:- tmp.b64 && del tmp.b64
The result is more like my requirement,
but I would like to avoid creating the temporary file tmp.b64 every time.
the usual windows way to generate a base 64 string is
Make any file (here simple text but can be PDF, docX or whatever.)
echo Hello World!>input.ext
Convert to base64
certutil -encodehex -f "input.ext" "output.txt" 0x40000001 1>nul
to see the result use
type output.txt
SGVsbG8gV29ybGQhDQo=
To send to another command use a pipe to use the TYPE output.txt as input. However like many conversion tasks it needs to be a file IO. To avoid any hint of a hard drive file, it would need a memory file system.
For looping a folder use a for loop with variables to suit
to decode output.txt
certutil -decode -f output.txt output.ext 1>nul
type output.ext
Hello World!
There is a very small (7.5 kB) downloadable exe c 2015 that can be used to encode/decode to file or console. You can try to download direct in a curl command like this but it must be 7680 bytes.
>curl -O https://master.dl.sourceforge.net/project/base64/b64.exe?viasf=1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7680 100 7680 0 0 12070 0 --:--:-- --:--:-- --:--:-- 12132
>b64.exe
b64 (Base64 Encode/Decode) Bob Trower 2001/08/03
(C) Copr Bob Trower 1986-2015 Version 0.94R
Usage: b64 -option [-l<num>] [<FileIn> [<FileOut>]]
Purpose: This program is a simple utility that implements
Base64 Content-Transfer-Encoding (RFC1113).
Use -h option for additional help.
>
Thus use is very simple:
b64 -e input.ext
Result on screen or use in a pipe
SGVsbG8gV29ybGQhDQo=
Note that's exactly the same as above however there has been no update as to most recent query about why it may not always work inbound as expected, but this is an outbound usage.
example of open issue
echo Hello World!|b64 -e
not an accurate result compared to above but an acceptable troughput
SGVsbG8gV29ybGQhCg==
so when using
echo SGVsbG8gV29ybGQhCg==|b64 -d
It does correctly report
Hello World!
The reason for the difference is the last EOL
0000000C: 0A 0D
And depending on circumstances, may or may not be a material difference. Also note that command lines are limited in working length, so console usage is also limited for string handling too
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With