mirror of
https://github.com/python/cpython.git
synced 2024-12-04 07:15:09 +08:00
fbb2b4c4a5
use faster code for base64.encodestring (courtesy of Mr. Tim Peters) and for base64.decodestring (courtesy of Anthony Baxter)
78 lines
1.9 KiB
Python
Executable File
78 lines
1.9 KiB
Python
Executable File
#! /usr/bin/env python
|
|
|
|
"""Conversions to/from base64 transport encoding as per RFC-1521."""
|
|
|
|
# Modified 04-Oct-95 by Jack to use binascii module
|
|
|
|
import binascii
|
|
|
|
__all__ = ["encode","decode","encodestring","decodestring"]
|
|
|
|
MAXLINESIZE = 76 # Excluding the CRLF
|
|
MAXBINSIZE = (MAXLINESIZE/4)*3
|
|
|
|
def encode(input, output):
|
|
"""Encode a file."""
|
|
while 1:
|
|
s = input.read(MAXBINSIZE)
|
|
if not s: break
|
|
while len(s) < MAXBINSIZE:
|
|
ns = input.read(MAXBINSIZE-len(s))
|
|
if not ns: break
|
|
s = s + ns
|
|
line = binascii.b2a_base64(s)
|
|
output.write(line)
|
|
|
|
def decode(input, output):
|
|
"""Decode a file."""
|
|
while 1:
|
|
line = input.readline()
|
|
if not line: break
|
|
s = binascii.a2b_base64(line)
|
|
output.write(s)
|
|
|
|
def encodestring(s):
|
|
"""Encode a string."""
|
|
pieces = []
|
|
for i in range(0, len(s), MAXBINSIZE):
|
|
chunk = s[i : i + MAXBINSIZE]
|
|
pieces.append(binascii.b2a_base64(chunk))
|
|
return "".join(pieces)
|
|
|
|
def decodestring(s):
|
|
"""Decode a string."""
|
|
return binascii.a2b_base64(s)
|
|
|
|
def test():
|
|
"""Small test program"""
|
|
import sys, getopt
|
|
try:
|
|
opts, args = getopt.getopt(sys.argv[1:], 'deut')
|
|
except getopt.error, msg:
|
|
sys.stdout = sys.stderr
|
|
print msg
|
|
print """usage: %s [-d|-e|-u|-t] [file|-]
|
|
-d, -u: decode
|
|
-e: encode (default)
|
|
-t: encode and decode string 'Aladdin:open sesame'"""%sys.argv[0]
|
|
sys.exit(2)
|
|
func = encode
|
|
for o, a in opts:
|
|
if o == '-e': func = encode
|
|
if o == '-d': func = decode
|
|
if o == '-u': func = decode
|
|
if o == '-t': test1(); return
|
|
if args and args[0] != '-':
|
|
func(open(args[0], 'rb'), sys.stdout)
|
|
else:
|
|
func(sys.stdin, sys.stdout)
|
|
|
|
def test1():
|
|
s0 = "Aladdin:open sesame"
|
|
s1 = encodestring(s0)
|
|
s2 = decodestring(s1)
|
|
print s0, `s1`, s2
|
|
|
|
if __name__ == '__main__':
|
|
test()
|