Codificação BaseN
As codificações BaseN são usadas para codificar dados binários em texto. Onde N é o tamanho do alfabeto de texto usado para codificação. As codificações BaseN são usadas para "preparar dados" para transmissão por meio de protocolos de texto (HTTP, SMTP) ou canais não digitais (por exemplo, impressão em papel).
A variante mais popular dessa codificação é Base64 . Apenas Base16 conhecido como hexadecimal ou simplesmente hexadecimal pode ser comparado na frequência de uso . As ferramentas para trabalhar com eles estão no .NET desde as primeiras versões, mas não são muito convenientes.
O que há no .NET Framework (Core)
System.Security.Cryptography
ToBase64Transform / FromBase64Transform
Algumas classes para converter de / para Base64. Com a classe auxiliar CryptoStream , ele pode ser usado para transmitir stream.
using System.Security.Cryptography;
var base64Transform = new ToBase64Transform();
var output = new MemoryStream();
var base64Encoder = new CryptoStream(output, base64Transform, CryptoStreamMode.Write);
base64Encoder.Write(new byte[] { 122 }, 0, 1);
base64Encoder.Close();
// output.ToArray() -> byte[4] { 101, 103, 61, 61 } aka "eg=="
System.Convert
ToBase64String / FromBase64String
Algumas funções para converter uma matriz de bytes em uma string Base64 e vice-versa.
using System;
var bytes = System.Convert.FromBase64String("eg==")
// bytes -> 122
System.BitConverter
Base16 (hexadecimal) , . : 0A-C0-D3
using System;
var hexString = BitConverter.ToString(new byte[] { 122, 122 });
// hexString -> "7A-7A"
System.Runtime.Remoting.Metadata.W3cXsd2001
SoapHexBinary (Framework-only)
Base16 (hexadecimal) .
using System.Runtime.Remoting.Metadata.W3cXsd2001;
var result = SoapHexBinary.Parse("A012");
// result.Value -> byte[];
System.Buffers.Text
Base64 (Core or System.Memory package)
Base64 . Span' Span .
Nuget
Multiformats.Base - Base2, 8, 16, 32, 58, 64 (+variants), MIT
BaseN . API . : .
SimpleBase - Base16, 32, 58, 85 (+variants), streaming, span, Apache-2
BaseN . .NET Core Span'. API, .
deniszykov.BaseN
, .NET Framework 4.5.
, Base64 Span<byte> to Span<byte> ( char[] <-> byte[] ). , . "" byte char , char 2 . .. , , .
/ :
byte[]
char[]
string
byte*
char*
Span<byte>
Span<char>
Tudo isso está dentro das duas classes BaseNDecoder / BaseNEncoder .
Os seguintes dicionários de codificação são suportados:
Base16 (hexadecimal / inferior / superior)
Base32
ZBase32
Base64
Base64 segura para Url
using deniszykov.BaseN;
var bytes = Base64Convert.ToBytes("eg==");
// bytes[0] -> 122
Um conjunto mais rico oferece a classe BaseNEncoding que implementa System.Text.Encoding .
using deniszykov.BaseN;
var count = BaseNEncoding.Base64Url.GetByteCount("eg=="); // -> 1
var bytes = BaseNEncoding.Base64Url.GetBytes("eg=="); // -> 122
var baseNEncoder = new BaseNEncoder(BaseNAlphabet.Base64Alphabet);
var input = "eg==";
var output = new byte[1024];
baseNEncoder.Convert(input, 0, 4, output, 0, 1, true, out var charsUsed, out var bytesUsed, out var completed);
// output[0] -> 122
Outros exemplos de uso "simples" estão aqui . Você pode usar seu próprio dicionário. Não haverá exemplos complexos, quem precisar poderá encontrá-los nos testes :)
Install-Package deniszykov.BaseN