Encodages Base64, Base32 et Base16 dans .NET

Encodage BaseN

Les encodages BaseN sont utilisés pour encoder des données binaires en texte. Où N est la taille de l'alphabet de texte utilisé pour l'encodage. Les codages BaseN sont utilisés pour «préparer les données» pour la transmission via des protocoles de texte (HTTP, SMTP) ou des canaux non numériques (par exemple impression sur papier).





La variante la plus populaire de cet encodage est Base64 . Seul Base16 dit hexadécimal ou simplement hexadécimal peut être comparé en fréquence d'utilisation . Les outils pour travailler avec eux sont en .NET depuis les premières versions, mais ils ne sont pas très pratiques.





Contenu du .NET Framework (Core)

Système.Sécurité.Cryptographie

ToBase64Transform / FromBase64Transform





Quelques classes à convertir vers / depuis Base64. Avec la classe d'assistance CryptoStream , elle peut être utilisée pour diffuser du flux.





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





Quelques fonctions pour convertir un tableau d'octets en une chaîne Base64 et inversement.





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>





Tout cela se trouve à l'intérieur des deux classes BaseNDecoder / BaseNEncoder .





Les dictionnaires d'encodage suivants sont pris en charge:





  • Base16 (hexadécimal / inférieur / supérieur)





  • Base32





  • ZBase32





  • Base64





  • Base64 sécurisée pour les URL





using deniszykov.BaseN;

var bytes = Base64Convert.ToBytes("eg==");
// bytes[0] -> 122
      
      



Un ensemble plus riche offre la classe BaseNEncoding qui implémente 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

      
      



D'autres exemples d'utilisation «simple» sont ici . Vous pouvez utiliser votre propre dictionnaire. Il n'y aura pas d'exemples complexes, ceux qui en ont besoin peuvent les trouver dans les tests :)





Install-Package deniszykov.BaseN
      
      










All Articles