PythonでBase64エンコーディングを行う際、パディング(’=’)が不要な場合があります。これは、エンコードされた文字列が特定の長さ(3の倍数)でない場合に発生します。しかし、Pythonにはこの問題を解決する方法がいくつかあります。
base64.b64decodeを使用する
Pythonのbase64.b64decode
関数は、余分なパディングを切り捨てることができます。つまり、b'abc='
はb'abc=='
と同じように動作します。これは、最大2つのパディング文字(b'=='
)を追加すれば、base64は不要なものを切り捨てるということです。
import base64
s = b'abc'
decoded_s = base64.b64decode(s + b'==')
ただし、文字列s
にすでにパディングがある場合(例えば、b\"aGVsbG8=\"
)、このアプローチはvalidate
キーワード引数がFalse
(デフォルト)に設定されている場合にのみ動作します。validate
がTrue
の場合、合計パディングが2文字を超えるとbinascii.Error
が発生します。
unpaddedbase64パッケージを使用する
Pythonのunpaddedbase64
パッケージを使用すると、パディングなしでBase64エンコーディングとデコーディングを行うことができます。
import unpaddedbase64
encoded_s = unpaddedbase64.encode_base64(b'x00') # 'AA'
decoded_s = unpaddedbase64.decode_base64('AA') # b'x00'
この記事がPythonでBase64エンコーディングをパディングなしで行う方法についての理解を深めるのに役立つことを願っています。