Base64 Encoding in C#
C# provides Base64 encoding through the System.Convert class.
Basic Usage
Encode to Base64
using System;
using System.Text;
string text = "Hello, World!";
byte[] bytes = Encoding.UTF8.GetBytes(text);
string encoded = Convert.ToBase64String(bytes);
Console.WriteLine(encoded); // "SGVsbG8sIFdvcmxkIQ==" Decode from Base64
using System;
using System.Text;
string encoded = "SGVsbG8sIFdvcmxkIQ==";
byte[] bytes = Convert.FromBase64String(encoded);
string decoded = Encoding.UTF8.GetString(bytes);
Console.WriteLine(decoded); // "Hello, World!" URL-Safe Base64
C# doesn't have built-in URL-safe Base64, but it's easy to implement:
using System;
using System.Text;
public static class Base64Url
{
public static string Encode(string input)
{
var bytes = Encoding.UTF8.GetBytes(input);
return Convert.ToBase64String(bytes)
.Replace('+', '-')
.Replace('/', '_')
.TrimEnd('=');
}
public static string Decode(string input)
{
string base64 = input.Replace('-', '+').Replace('_', '/');
switch (base64.Length % 4)
{
case 2: base64 += "=="; break;
case 3: base64 += "="; break;
}
var bytes = Convert.FromBase64String(base64);
return Encoding.UTF8.GetString(bytes);
}
}
// Usage
string encoded = Base64Url.Encode("Hello, World!");
string decoded = Base64Url.Decode(encoded); File to Base64
Encode a File
using System;
using System.IO;
byte[] bytes = File.ReadAllBytes("image.png");
string encoded = Convert.ToBase64String(bytes);
Console.WriteLine(encoded); Decode to File
using System;
using System.IO;
string encoded = "iVBORw0KGgo..."; // Base64 string
byte[] bytes = Convert.FromBase64String(encoded);
File.WriteAllBytes("output.png", bytes); With Line Breaks (MIME)
Insert line breaks for MIME compatibility:
using System;
using System.Text;
string text = "Hello, World!";
byte[] bytes = Encoding.UTF8.GetBytes(text);
// Insert line breaks every 76 characters
string encoded = Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks);
Console.WriteLine(encoded); Streaming Large Files
For large files, use streams:
using System;
using System.IO;
using System.Security.Cryptography;
// Encode file to Base64
using (var inputStream = File.OpenRead("input.bin"))
using (var outputStream = File.Create("output.txt"))
using (var base64Stream = new CryptoStream(outputStream, new ToBase64Transform(), CryptoStreamMode.Write))
{
inputStream.CopyTo(base64Stream);
}
// Decode Base64 to file
using (var inputStream = File.OpenRead("input.txt"))
using (var base64Stream = new CryptoStream(inputStream, new FromBase64Transform(), CryptoStreamMode.Read))
using (var outputStream = File.Create("output.bin"))
{
base64Stream.CopyTo(outputStream);
} Validation
Check if a string is valid Base64:
using System;
public static bool IsValidBase64(string input)
{
if (string.IsNullOrEmpty(input)) return false;
try
{
Convert.FromBase64String(input);
return true;
}
catch (FormatException)
{
return false;
}
}
Console.WriteLine(IsValidBase64("SGVsbG8=")); // true
Console.WriteLine(IsValidBase64("Invalid!!!")); // false .NET 5+ Span-based
For better performance in .NET 5+:
using System;
using System.Buffers.Text;
// Encode
Span<byte> source = stackalloc byte[] { 72, 101, 108, 108, 111 }; // "Hello"
Span<byte> destination = stackalloc byte[8];
Base64.EncodeToUtf8(source, destination, out _, out _);
// Decode
Base64.DecodeFromUtf8(destination, source, out _, out _);