Codificações Base64, Base32 e Base16 em .NET

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

BitConverter.ToString





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
      
      










All Articles