Skip to main content

Base编码

Base 编码有哪些

Base 编码是一种广泛使用的数据编码方法,主要用于将二进制数据转换为可打印的 ASCII 字符。这种编码通常用于在不支持所有 8 位值的媒介(例如电子邮件或 URL)中传输二进制数据。以下是一些常见的 Base 编码类型:

  1. Base16 (Hexadecimal):

    • Base16 编码,也称为十六进制编码,每 4 位二进制数据转换为一个 16 进制数字。
    • 输出字符集包括 0-9 和 A-F。
  2. Base32:

    • Base32 编码使用 32 个字符(A-Z 和 2-7)来表示二进制数据。
    • 每 5 位二进制数据转换为一个字符,因此编码效率较高,同时保持可读性。
  3. Base58:

    • Base58 是比特币地址中使用的一种编码形式,去除了一些视觉上容易混淆的字符,如 0(零)、O(大写字母 O)、I(大写字母 i)和 l(小写字母 L)。
    • 它用于缩短大数字的表示,同时保持字符的可识别性。
  4. Base64:

    • Base64 是最常用的 Base 编码,用于电子邮件附件和 Web 数据等。
    • 每 6 位二进制数据转换为一个 ASCII 字符,输出字符集包括 A-Z, a-z, 0-9, +, /,并在编码文本的末尾使用=作为填充字符。
  5. Base85 (Ascii85):

    • Base85 使用 85 个 ASCII 字符来表示二进制数据,比 Base64 更加紧凑。
    • 它常用于 Adobe 的 PostScript 和 PDF 文档格式。

这些 Base 编码各有其特点和应用场景,选择合适的编码方式取决于具体的需求,如编码效率、数据大小、可读性及兼容性等因素。

相关的前端库和后端 golang 库

针对 Base 编码,无论是前端还是后端开发,都有一系列的库可以使用来方便地实现数据的编码和解码。下面列出一些常用的前端 JavaScript 库和后端 Go 语言库:

前端 JavaScript 库

  1. Base64:

    • btoa()atob(): 这是浏览器内置的函数,可以直接用来进行 Base64 的编码和解码。
    • js-base64: 一个流行的第三方库,提供更全面的 Base64 支持,包括 Unicode 字符串的处理。

    安装方法:

    npm install js-base64

    使用示例:

    import { Base64 } from 'js-base64';
    let encoded = Base64.encode('hello world'); // 编码
    let decoded = Base64.decode(encoded); // 解码
  2. Base32:

    • base32-encodebase32-decode: 专门用于 Base32 编码和解码的库。

    安装方法:

    npm install base32-encode base32-decode

    使用示例:

    import base32Encode from 'base32-encode';
    import base32Decode from 'base32-decode';

    let buffer = Buffer.from('hello world');
    let encoded = base32Encode(buffer, 'Crockford');
    let decoded = base32Decode(encoded, 'Crockford');

后端 Go 语言库

  1. Base64:

    • Go 标准库中的encoding/base64包提供了 Base64 的支持。

    使用示例:

    package main

    import (
    "encoding/base64"
    "fmt"
    )

    func main() {
    input := []byte("hello world")
    // 编码
    encodedStr := base64.StdEncoding.EncodeToString(input)
    fmt.Println("Encoded:", encodedStr)
    // 解码
    decodedBytes, _ := base64.StdEncoding.DecodeString(encodedStr)
    fmt.Println("Decoded:", string(decodedBytes))
    }
  2. Base32:

    • Go 标准库中的encoding/base32包同样提供了 Base32 的编码和解码功能。

    使用示例:

    package main

    import (
    "encoding/base32"
    "fmt"
    )

    func main() {
    input := []byte("hello world")
    // 编码
    encodedStr := base32.StdEncoding.EncodeToString(input)
    fmt.Println("Encoded:", encodedStr)
    // 解码
    decodedBytes, _ := base32.StdEncoding.DecodeString(encodedStr)
    fmt.Println("Decoded:", string(decodedBytes))
    }
  3. Base58:

    • btcsuite/btcutil: 这是一个比特币相关的工具库,其中包括 Base58 的编码和解码。

    安装方法:

    go get github.com/btcsuite/btcutil

    使用示例:

    package main

    import (
    "fmt"
    "github.com/btcsuite/btcutil/base58"
    )

    func main() {
    input := "hello world"
    // 编码
    encoded := base58.Encode([]byte(input))
    fmt.Println("Encoded:", encoded)
    // 解码
    decoded := base58.Decode(encoded)
    fmt.Println("Decoded:", string(decoded))
    }

这些库提供了基本的编码和解码功能,可以根据你的项目需求选择合适的库进行集成和使用。

Site

  1. https://simplewebauthn.dev/docs/packages/browser
  2. https://github.com/MasterKale/SimpleWebAuthn/blob/master/packages/browser/src/helpers/base64URLStringToBuffer.ts
  3. https://github.com/MasterKale/SimpleWebAuthn/blob/master/packages/browser/src/helpers/bufferToBase64URLString.ts