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
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