using System;
using System.Collections.Generic;
using System.Text;
namespace Base64ForRedoFS
{
//编码类:
/// <summary>
/// Base64编码类。
/// 将byte[]类型转换成Base64编码的string类型。
/// </summary>
public class Base64Encoder
{
byte[] source;
int length, length2;
int blockCount;
int paddingCount;
public static Base64Encoder Encoder = new Base64Encoder();
public Base64Encoder()
{
}
private void init(byte[] input)
{
source = input;
length = input.Length;
if ((length % 3) == 0)
{
paddingCount = 0;
blockCount = length / 3;
}
else
{
paddingCount = 3 - (length % 3);
blockCount = (length + paddingCount) / 3;
}
length2 = length + paddingCount;
}
public string GetEncoded(byte[] input)
{
//初始化
init(input);
byte[] source2;
source2 = new byte[length2];
for (int x = 0; x < length2; x++)
{
if (x < length)
{
source2[x] = source[x];
}
else
{
source2[x] = 0;
}
}
byte b1, b2, b3;
byte temp, temp1, temp2, temp3, temp4;
byte[] buffer = new byte[blockCount * 4];
char[] result = new char[blockCount * 4];
for (int x = 0; x < blockCount; x++)
{
b1 = source2[x * 3];
b2 = source2[x * 3 + 1];
b3 = source2[x * 3 + 2];
temp1 = (byte)((b1 & 252) >> 2);
temp = (byte)((b1 & 3) << 4);
temp2 = (byte)((b2 & 240) >> 4);
temp2 += temp;
temp = (byte)((b2 & 15) << 2);
temp3 = (byte)((b3 & 192) >> 6);
temp3 += temp;
temp4 = (byte)(b3 & 63);
buffer[x * 4] = temp1;
buffer[x * 4 + 1] = temp2;
buffer[x * 4 + 2] = temp3;
buffer[x * 4 + 3] = temp4;
}
for (int x = 0; x < blockCount * 4; x++)
{
result[x] = sixbit2char(buffer[x]);
}
switch (paddingCount)
{
case 0: break;
case 1: result[blockCount * 4 - 1] = '='; break;
case 2: result[blockCount * 4 - 1] = '=';
result[blockCount * 4 - 2] = '=';
break;
default: break;
}
return new string(result);
}
private char sixbit2char(byte b)
{
char[] lookupTable = new char[64]{
'A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z',
'0','1','2','3','4','5','6','7','8','9','+','/'};
if ((b >= 0) && (b <= 63))
{
return lookupTable[(int)b];
}
else
{
return ' ';
}
}
// 解码类:
/// <summary>
/// Base64解码类
/// 将Base64编码的string类型转换成byte[]类型
/// </summary>
public class Base64Decoder
{
char[] source;
int length, length2, length3;
int blockCount;
int paddingCount;
public static Base64Decoder Decoder = new Base64Decoder();
public Base64Decoder()
{
}
private void init(char[] input)
{
int temp = 0;
source = input;
length = input.Length;
for (int x = 0; x < 2; x++)
{
if (input[length - x - 1] == '=')
temp++;
}
paddingCount = temp;
blockCount = length / 4;
length2 = blockCount * 3;
}
public byte[] GetDecoded(string strInput)
{
//初始化
init(strInput.ToCharArray());
byte[] buffer = new byte[length];
byte[] buffer2 = new byte[length2];
for (int x = 0; x < length; x++)
{
buffer[x] = char2sixbit(source[x]);
}
byte b, b1, b2, b3;
byte temp1, temp2, temp3, temp4;
for (int x = 0; x < blockCount; x++)
{
temp1 = buffer[x * 4];
temp2 = buffer[x * 4 + 1];
temp3 = buffer[x * 4 + 2];
temp4 = buffer[x * 4 + 3];
b = (byte)(temp1 << 2);
b1 = (byte)((temp2 & 48) >> 4);
b1 += b;
b = (byte)((temp2 & 15) << 4);
b2 = (byte)((temp3 & 60) >> 2);
b2 += b;
b = (byte)((temp3 & 3) << 6);
b3 = temp4;
b3 += b;
buffer2[x * 3] = b1;
buffer2[x * 3 + 1] = b2;
buffer2[x * 3 + 2] = b3;
}
length3 = length2 - paddingCount;
byte[] result = new byte[length3];
for (int x = 0; x < length3; x++)
{
result[x] = buffer2[x];
}
return result;
}
private byte char2sixbit(char c)
{
char[] lookupTable = new char[64]{
'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y', 'Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x','y','z',
'0','1','2','3','4','5','6','7','8','9','+','/'};
if (c == '=')
return 0;
else
{
for (int x = 0; x < 64; x++)
{
if (lookupTable[x] == c)
return (byte)x;
}
return 0;
}
}
}
//解码类结束
}
}
//formMain
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Base64ForRedoFS
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void btnEncoder_Click(object sender, EventArgs e)
{ // 编码:
byte[] bytes=Encoding.Default.GetBytes(textBox1.Text);
textBox2.Text= Convert.ToBase64String(bytes);
}
private void btnDecoder_Click(object sender, EventArgs e)
{
//解码:
//"ztKwrsTj"是“我爱你”的base64编码
byte[] outputb = Convert.FromBase64String(textBox2.Text);
string orgStr= Encoding.Default.GetString(outputb);
textBox1.Text = orgStr;
}
}
}
相关推荐
在C#编程中,Base64编码和解码是常见的操作,常用于处理图像、文件或加密数据。本项目提供了一个C#开发的Base64编码和解码软件,包含源码,方便开发者学习和参考。 在C#中,进行Base64编码和解码主要使用`System....
在C#编程中,处理Base64编码和解码是常见的任务,特别是在处理包含二进制附件的邮件时。本文将深入探讨C#中如何实现Base64编码和解码,以及它们在邮件解码中的应用。 首先,我们需要了解Base64的基本原理。Base64...
.net C#实现Base64编码与解码
在C#中,Base64编码和解码可以通过System.Convert类提供的静态方法来实现。例如,`Convert.ToBase64String()`用于编码,`Convert.FromBase64String()`用于解码。以下是这两个方法的基本使用: ```csharp // Base64...
在C#编程语言中,处理Base64编码和解码是非常常见的任务,尤其在处理二进制数据如图片、文档或文件时。下面将详细阐述如何使用C#进行Base64编解码。 1. **Base64编码原理** Base64编码是基于64个字符(A-Z、a-z、0...
在C#中,我们可以使用`System.Convert`类提供的静态方法`ToBase64String`来进行Base64编码。这个方法接受一个字节数组作为参数,返回对应的Base64字符串。例如: ```csharp byte[] data = File.ReadAllBytes("your...
总之,"Base64编码解码工具.zip"包含了一个用Visual Studio和MFC开发的实用工具,能够方便地进行Base64编码和解码操作,对于开发者和普通用户来说都是一个便捷的工具。通过理解Base64编码的原理和这个工具的工作机制...
在C#中,Base64编码和解码是相当常见的操作,尤其在处理文本格式的网络通信时。 C#提供了内置的类`System.Convert`和`System.Text.Encoding`来支持Base64的编码和解码。以下是对这两个类如何使用的详细介绍: 1. *...
用户解压后,可以直接运行里面的可执行文件来启动Base64编码解码工具。 总的来说,Base64编码和解码是计算机科学中基础但重要的数据转换技术,尤其在网络通信和数据存储中广泛应用。这个C#开发的.NET 6.0工具简化了...
在C#编程语言中,处理Base64编码和解码是一项基本技能。下面我们将深入探讨C#中的Base64编码和解码以及如何在一个类中实现这些功能。 Base64编码的基本原理是将每3个字节(24位)的数据拆分为4组,每组6位,然后将...
### 编码与解码:十六进制与Base64详解 #### 一、十六进制与Base64概述 **十六进制**是一种常用的数字表示方法,它使用16个符号来表示数字,通常使用0-9和A-F这16个字符。这种表示方法在计算机科学中非常常见,...
在C#中,`System.Convert`类提供了方便的方法来进行Base64编码和解码。要将文件转换为Base64字符串,我们可以按照以下步骤进行: 1. 打开文件:使用`System.IO.FileStream`类打开并读取文件。`FileStream`是处理...
在C#中,可以使用`System.Convert`类的`ToBase64String`和`FromBase64String`方法进行Base64编码和解码。 ```csharp byte[] data = Encoding.UTF8.GetBytes("原始数据"); string base64String = Convert.ToBase64...
在标题提到的“Base64编码转换工具”中,我们主要讨论的是一个用C#语言开发的小型应用程序,该程序能够方便地实现Base64编码与普通文本之间的相互转换。 Base64编码的基本原理是将每3个字节(24位)的数据分成4组,...
总之,Base64编码解码是计算机网络通信中不可或缺的一部分,尤其在处理二进制数据和跨平台兼容性问题时。提供的`base64.dll`和其函数说明,为开发者提供了一种方便的工具,使他们在各种开发环境下都能轻松实现Base64...
这个标题所指的“BASE64编码解码”是一款用C#语言编写的软件,专门用于对数据进行BASE64的编码和解码操作。由于C#是微软开发的一种面向对象的编程语言,因此这款软件可能依赖于.NET框架,特别是提到的.NET 1.1环境,...
在C#编程语言中,Base64是一种用于将二进制数据编码为ASCII字符串的机制,以便在不支持二进制传输的系统(如电子邮件)中传输。Base64编码可以将任何二进制数据转换为可打印的字符,包括图片、文件和其他非文本数据...
在这个“base64编码解码工具源码”中,我们可以期待找到一个实现了Base64编码和解码功能的应用程序。这个工具具有用户界面,使得非技术用户也能方便地对数据进行编码和解码操作。用户界面可能包含输入框用于输入待...
本篇文章介绍了如何在.NET和C#环境中使用Base64编码进行字符串和文件的编码及解码。这些方法对于开发人员来说是非常实用的工具,可以在处理网络传输、数据存储等方面发挥重要作用。通过对这些代码的理解和实践,可以...
总体而言,本文详细介绍了如何在C#中利用.NET框架的功能进行Base64编码和解码操作,包括必要的命名空间引入、编码与解码方法的实现、测试方法的编写,以及如何通过测试来验证编码和解码的正确性。这些知识对于开发者...