Pengkodean Base64, Base32 dan Base16 di .NET

Pengkodean BaseN

Pengkodean BaseN digunakan untuk menyandikan data biner ke dalam teks. Dimana N adalah ukuran alfabet teks yang digunakan untuk encoding. Pengkodean BaseN digunakan untuk "menyiapkan data" untuk transmisi melalui protokol teks (HTTP, SMTP) atau saluran non-digital (misalnya mencetak di atas kertas).





Varian paling populer dari pengkodean ini adalah Base64 . Hanya Base16 yang dikenal sebagai heksadesimal atau hanya hex yang dapat dibandingkan dalam frekuensi penggunaan . Alat untuk bekerja dengannya telah ada di .NET sejak versi pertama, tetapi sangat tidak nyaman.





Apa yang ada di .NET Framework (Core)

System.Security.Cryptography

ToBase64Transform / FromBase64Transform





Beberapa kelas untuk diubah ke / dari Base64. Dengan kelas pembantu CryptoStream , ini dapat digunakan untuk streaming.





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





Sepasang fungsi untuk mengonversi larik byte menjadi string Base64 dan sebaliknya.





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>





Semua ini terletak di dalam dua kelas BaseNDecoder / BaseNEncoder .





Kamus pengkodean berikut didukung:





  • Base16 (heksadesimal / bawah / atas)





  • Base32





  • ZBase32





  • Base64





  • Base64 Url-safe





using deniszykov.BaseN;

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



Kumpulan yang lebih kaya menawarkan kelas BaseNEncoding yang mengimplementasikan 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

      
      



Contoh lain dari penggunaan "sederhana" ada di sini . Anda bisa menggunakan kamus Anda sendiri. Tidak akan ada contoh yang rumit, mereka yang membutuhkannya dapat menemukannya dalam tes :)





Install-Package deniszykov.BaseN
      
      










All Articles