I was encoding (from terminal) into base64. But I guess the commands are not executing properly.
$ echo 123456789 | base64
MTIzNDU2Nzg5Cg==And then when I did the same on base64encode, I got this result
MTIzNDU2Nzg5I thought that maybe echo is being encoded as well so i ran
$ echo | base64
Cg==I guess i was right, but that didn't help either as in another instance:
$ echo qwertyuiop | base64
cXdlcnR5dWlvcAo=and when the same was encoded using base64encode the result was
cXdlcnR5dWlvcA==And not suprisingly i the results from base64encode were accepted(in SMTP)
So, what am i missing here? and how can i sucessfully convert the string or number into base64?
11 Answer
The answer is simple. With
echo 123456789 | base64or
echo qwertyuiop | base64you always have a trailing newline.
Avoid this behavior by using the n switch for the echo command
% echo -n qwertyuiop | base64
cXdlcnR5dWlvcA==or use printf
% printf qwertyuiop | base64
cXdlcnR5dWlvcA==as you can see it is the same result as returned by base64encode.
And as @AndreaCorbellini says in the comments
5Base64 produces 4 bytes of output for every 3 bytes of input, so there is never a 1:1 corrispondence between the input bytes and the output bytes. This means that a new line may end up being encoded in different ways, depending on the bytes that precede and follow it.