base64.urlsafe_b64encode and the equal character

Clodoaldo clodoaldo.pinto at gmail.com
Fri Mar 28 13:03:03 EDT 2008


On Mar 28, 1:56 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Fri, 28 Mar 2008 13:22:06 -0300, Clodoaldo <clodoaldo.pi... at gmail.com>
> escribió:
>
>
>
> > On Mar 28, 12:09 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
> >> En Fri, 28 Mar 2008 10:54:49 -0300, Clodoaldo
> >> <clodoaldo.pi... at gmail.com> escribió:
>
> >> > What i need to know is where can an equal char appear in a
> >> > urlsafe_b64encoded string?:
>
> >> > a)only at end;
> >> > b)both at the end and at the begginig;
> >> > c)anywhere in the string;
>
> >> > A sure answer will make my regexp safer.
>
> >> Only at the end. The encoded string has 4*n chars when the input string
> >> has 3*n chars; when the input length is 3*n+1 or 3*n+2, the output has
> >> 4*(n+1) chars right padded with 2 or 1 "=" chars.
> >> If your input has 3n chars, the output won't have any "="
>
> > Thanks. But I'm not sure i get it. What is n?
>
> (Any nonnegative integer...)
> I mean: For base64 encoding, the length of the output depends solely of
> the length of the input. If the input string length is a multiple of 3,
> the output length is a multiple of 4, with no "=". If the input length is
> one more than a multiple of 3, the output has two "==" at the end. If the
> input length is two more than a multiple of 3, the output has only one "="
> at the end. In all cases, the output length is a multiple of 4.
>
> [base64 uses 64=2**6 characters so it encodes 6 bits per character; to
> encode 3 bytes=3*8=24 bits one requires 24/6=4 characters]
>
> > A md5 digest will always be 16 bytes length. So if i understand it
> > correctly (not sure) the output will always be 22 chars plus two
> > trailing equal chars. Right?
>
> Exactly.

Thank you. That was great support!



More information about the Python-list mailing list