試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Pythonのbase64サポートモジュールについて

Pythonには標準でBase64エンコード/デコードをサポートする「base64」モジュールがあり、以下の関数に対象の文字列を渡すことで、戻り値として処理結果が得られる。
標準バージョン:

URLの一部として安全に使用するバージョン:

下はPython 2での簡単な例。
(2009/3/14)文字列メソッドのencode()decode()でもBase64エンコード/デコードができることが分かった(nullpobug氏に感謝)。下のコードもそれに伴って修正。

#! /usr/bin/python
# -*- coding: utf-8 -*-

import base64

plain_str = u'試験運用中なLinux備忘録'.encode ('utf-8')
print "plain_str: " + plain_str
encoded = base64.standard_b64encode (plain_str)
print "encoded = base64.standard_b64encode (plain_str): " + encoded
decoded = base64.standard_b64decode (encoded)
print "decoded = base64.standard_b64decode (encoded): " + decoded

encoded = plain_str.encode ('base64')
print "encoded = plain_str.encode ('base64'): " + encoded
decoded = encoded.decode ('base64')
print "decoded = encoded.decode ('base64'): " + decoded

上のコードを実行すると下のようになる。

plain_str: 試験運用中なLinux備忘録
encoded = base64.standard_b64encode (plain_str): 6Kmm6aiT6YGL55So5Lit44GqTGludXjlgpnlv5jpjLI=
decoded = base64.standard_b64decode (encoded): 試験運用中なLinux備忘録
encoded = plain_str.encode ('base64'): 6Kmm6aiT6YGL55So5Lit44GqTGludXjlgpnlv5jpjLI=

decoded = encoded.decode ('base64'): 試験運用中なLinux備忘録

(2014/10/10)Python 3では下のような使い方になる。

#! /usr/bin/python
# -*- coding: utf-8 -*-

import base64, codecs

plain_str = '試験運用中なLinux備忘録'
print ('plain_str = {0} ({1})'.format (plain_str, plain_str.encode ('utf-8')))
encoded = base64.standard_b64encode (plain_str.encode ('utf-8'))
print ('encoded = base64.standard_b64encode (plain_str): {0}'.format (encoded))
decoded = base64.standard_b64decode (encoded)
print ('decoded = base64.standard_b64decode (encoded): {0} ({1})'.format (decoded, str (decoded, encoding='utf-8')))

encoded = codecs.encode (plain_str.encode ('utf-8'), 'base64')
print ("encoded = codecs.encode (plain_str.encode ('utf-8'), 'base64'): {0}".format (encoded))
decoded = codecs.decode (encoded, 'base64')
print ("decoded = codecs.decode (encoded, 'base64'): {0} ({1})".format (decoded, str (decoded, encoding='utf-8')))

出力は下のようになる。

plain_str = 試験運用中なLinux備忘録 (b'\xe8\xa9\xa6\xe9\xa8\x93\xe9\x81\x8b\xe7\x94\xa8\xe4\xb8\xad\xe3\x81\xaaLinux\xe5\x82\x99\xe5\xbf\x98\xe9\x8c\xb2')
encoded = base64.standard_b64encode (plain_str): b'6Kmm6aiT6YGL55So5Lit44GqTGludXjlgpnlv5jpjLI='
decoded = base64.standard_b64decode (encoded): b'\xe8\xa9\xa6\xe9\xa8\x93\xe9\x81\x8b\xe7\x94\xa8\xe4\xb8\xad\xe3\x81\xaaLinux\xe5\x82\x99\xe5\xbf\x98\xe9\x8c\xb2' (試験運用中なLinux備忘録)
encoded = codecs.encode (plain_str.encode ('utf-8'), 'base64'): b'6Kmm6aiT6YGL55So5Lit44GqTGludXjlgpnlv5jpjLI=\n'
decoded = codecs.decode (encoded, 'base64'): b'\xe8\xa9\xa6\xe9\xa8\x93\xe9\x81\x8b\xe7\x94\xa8\xe4\xb8\xad\xe3\x81\xaaLinux\xe5\x82\x99\xe5\xbf\x98\xe9\x8c\xb2' (試験運用中なLinux備忘録)