Base32 по RFC 4648 разбивает байты на пятибитные значения, обозначаемые A-Z и 2-7, а последний восьмисимвольный блок дополняет знаком =. Декодер игнорирует пробелы и регистр, но проверяет длину, заполнение и неиспользуемые биты.
Используйте Base32 для вводимых вручную токенов и систем, которым нужен регистронезависимый буквенно-цифровой алфавит. Объём растёт примерно на 60 %, секретности и обнаружения ошибок нет; алфавиты Crockford Base32 и Base32hex несовместимы.
// npm install hi-base32
const base32 = require('hi-base32');
const encoded = base32.encode('Hello');
console.log(encoded);
// Output: JBSWY3DP
const decoded = Buffer.from(base32.decode.asBytes('JBSWY3DP')).toString('utf8');
console.log(decoded);
// Output: Hello
package main
import (
"encoding/base32"
"fmt"
)
func main() {
encoded := base32.StdEncoding.EncodeToString([]byte("Hello"))
fmt.Println(encoded)
// Output: JBSWY3DP
decoded, _ := base32.StdEncoding.DecodeString("JBSWY3DP")
fmt.Println(string(decoded))
// Output: Hello
}
<?php
// composer require paragonie/constant_time_encoding
require 'vendor/autoload.php';
use ParagonIE\ConstantTime\Encoding;
$encoded = Encoding::base32EncodeUpper("Hello");
echo $encoded . "\n";
// Output: JBSWY3DP
$decoded = Encoding::base32DecodeUpper("JBSWY3DP");
echo $decoded . "\n";
// Output: Hello