...

パッケージ base32

import "encoding/base32"
概要
目次

概要 ▾

base32 パッケージは RFC 4648 で定義された base32 エンコードを実装します。

定数

const (
    StdPadding rune = '=' // 標準パディング文字
    NoPadding  rune = -1  // パディングなし
)

変数

HexEncoding は RFC 4648 で定義されている “Extended Hex Alphabet” です。 通常 DNS で使用されます。

var HexEncoding = NewEncoding(encodeHex)

StdEncoding は, RFC 4648 で定義されている標準の base32 エンコーディングです。

var StdEncoding = NewEncoding(encodeStd)

func NewDecoder

func NewDecoder(enc *Encoding, r io.Reader) io.Reader

NewDecoder は新しい base32 ストリームデコーダを構築します。

func NewEncoder

func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser

NewEncoder は新しい base32 ストリームエンコーダを返します。 返されたライターに書き込まれたデータは enc を使用してエンコードされてから w に書き込まれます。 Base32 エンコーディングは 5 バイトブロックで動作します。 書き込みが終了したら,呼び出し側は返されたエンコーダを閉じて, 部分的に書き込まれたブロックをフラッシュする必要があります。

コード:

input := []byte("foo\x00bar")
encoder := base32.NewEncoder(base32.StdEncoding, os.Stdout)
encoder.Write(input)
// 部分ブロックのフラッシュが完了したら,エンコーダを閉じる必要があります。
// 次の行をコメントアウトすると,最後の部分ブロック "r" はエンコードされません。
encoder.Close()

出力:

MZXW6ADCMFZA====

type CorruptInputError

type CorruptInputError int64

func (CorruptInputError) Error

func (e CorruptInputError) Error() string

type Encoding

Encoding は, 32 文字のアルファベットで定義された基数 32 のエンコード / デコード方式です。 最も一般的なのは SASL SSAPI 用に導入され RFC 4648 で標準化された "base32" エンコーディングです。 代替の "base32hex" エンコーディングは DNSSEC で使用されます。

type Encoding struct {
    // エクスポートされていないフィールドがあります
}

func NewEncoding

func NewEncoding(encoder string) *Encoding

NewEncoding は,与えられたアルファベットで定義された新しい Encoding を返します。 これは 32 バイトの文字列でなければなりません。

func (*Encoding) Decode

func (enc *Encoding) Decode(dst, src []byte) (n int, err error)

デコード enc はエンコーディング enc を使って src をデコードします。 最大で DecodedLen(len(src)) バイトを dst に書き込み,書き込まれたバイト数を返します。 src に無効な base32 データが含まれている場合は,正常に書き込まれたバイト数と CorruptInputError が返されます。 改行文字 (\r と \n) は無視されます。

func (*Encoding) DecodeString

func (enc *Encoding) DecodeString(s string) ([]byte, error)

DecodeString は, base32 文字列 s で表されるバイトを返します。

コード:

str := "ONXW2ZJAMRQXIYJAO5UXI2BAAAQGC3TEEDX3XPY="
data, err := base32.StdEncoding.DecodeString(str)
if err != nil {
    fmt.Println("error:", err)
    return
}
fmt.Printf("%q\n", data)

出力:

"some data with \x00 and \ufeff"

func (*Encoding) DecodedLen

func (enc *Encoding) DecodedLen(n int) int

DecodedLen は, n バイトの base32 エンコードデータに対応するデコードデータの最大長をバイト数で返します。

func (*Encoding) Encode

func (enc *Encoding) Encode(dst, src []byte)

Encode はエンコーディング enc を使用して src をエンコードし, EncodedLen(len(src)) バイトを dst に書き込みます。

エンコーディングは出力を 8 バイトの倍数にパディングするので, Encode は大きなデータストリームの個々のブロックでの使用には適していません。 代わりに NewEncoder() を使用してください。

func (*Encoding) EncodeToString

func (enc *Encoding) EncodeToString(src []byte) string

EncodeToString は, src の base32 エンコーディングを返します。

コード:

data := []byte("any + old & data")
str := base32.StdEncoding.EncodeToString(data)
fmt.Println(str)

出力:

MFXHSIBLEBXWYZBAEYQGIYLUME======

func (*Encoding) EncodedLen

func (enc *Encoding) EncodedLen(n int) int

EncodedLen は,長さ n の入力バッファの base32 エンコーディングの長さをバイト数で返します。

func (Encoding) WithPadding 1.9

func (enc Encoding) WithPadding(padding rune) *Encoding

WithPadding は,padding 文字を変更した,あるいは,NoPadding でパディングを無効にした点を除いて enc と同じ新しいエンコーディングを作成します。 padding 文字は '\r' や '\n' であってはならず,エンコーディングのアルファベットに含まれてはならず, '\xff' 以下のルーンでなければなりません。