`
bdk82924
  • 浏览: 562209 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C# Base64编码与解码

阅读更多
C# Base64编码与解码
 
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编码和解码 带源码.rar

    在C#编程中,Base64编码和解码是常见的操作,常用于处理图像、文件或加密数据。本项目提供了一个C#开发的Base64编码和解码软件,包含源码,方便开发者学习和参考。 在C#中,进行Base64编码和解码主要使用`System....

    C#实现Base64编码与解码 邮件解码

    在C#编程中,处理Base64编码和解码是常见的任务,特别是在处理包含二进制附件的邮件时。本文将深入探讨C#中如何实现Base64编码和解码,以及它们在邮件解码中的应用。 首先,我们需要了解Base64的基本原理。Base64...

    C#实现Base64编码与解码

    .net C#实现Base64编码与解码

    Base64编码和解码器

    在C#中,Base64编码和解码可以通过System.Convert类提供的静态方法来实现。例如,`Convert.ToBase64String()`用于编码,`Convert.FromBase64String()`用于解码。以下是这两个方法的基本使用: ```csharp // Base64...

    C# Base64编解码

    在C#编程语言中,处理Base64编码和解码是非常常见的任务,尤其在处理二进制数据如图片、文档或文件时。下面将详细阐述如何使用C#进行Base64编解码。 1. **Base64编码原理** Base64编码是基于64个字符(A-Z、a-z、0...

    C# Base64加密解密

    在C#中,我们可以使用`System.Convert`类提供的静态方法`ToBase64String`来进行Base64编码。这个方法接受一个字节数组作为参数,返回对应的Base64字符串。例如: ```csharp byte[] data = File.ReadAllBytes("your...

    Base64编码解码工具.zip

    总之,"Base64编码解码工具.zip"包含了一个用Visual Studio和MFC开发的实用工具,能够方便地进行Base64编码和解码操作,对于开发者和普通用户来说都是一个便捷的工具。通过理解Base64编码的原理和这个工具的工作机制...

    CSharp(c#)Base64编码解码

    在C#中,Base64编码和解码是相当常见的操作,尤其在处理文本格式的网络通信时。 C#提供了内置的类`System.Convert`和`System.Text.Encoding`来支持Base64的编码和解码。以下是对这两个类如何使用的详细介绍: 1. *...

    base64编码解码与数据显示

    用户解压后,可以直接运行里面的可执行文件来启动Base64编码解码工具。 总的来说,Base64编码和解码是计算机科学中基础但重要的数据转换技术,尤其在网络通信和数据存储中广泛应用。这个C#开发的.NET 6.0工具简化了...

    C# base64編解碼

    在C#编程语言中,处理Base64编码和解码是一项基本技能。下面我们将深入探讨C#中的Base64编码和解码以及如何在一个类中实现这些功能。 Base64编码的基本原理是将每3个字节(24位)的数据拆分为4组,每组6位,然后将...

    编码/解码 十六进制/Base64

    ### 编码与解码:十六进制与Base64详解 #### 一、十六进制与Base64概述 **十六进制**是一种常用的数字表示方法,它使用16个符号来表示数字,通常使用0-9和A-F这16个字符。这种表示方法在计算机科学中非常常见,...

    C# 文件转换base64

    在C#中,`System.Convert`类提供了方便的方法来进行Base64编码和解码。要将文件转换为Base64字符串,我们可以按照以下步骤进行: 1. 打开文件:使用`System.IO.FileStream`类打开并读取文件。`FileStream`是处理...

    C# base64加密,秘钥加密

    在C#中,可以使用`System.Convert`类的`ToBase64String`和`FromBase64String`方法进行Base64编码和解码。 ```csharp byte[] data = Encoding.UTF8.GetBytes("原始数据"); string base64String = Convert.ToBase64...

    Base64编码转换工具

    在标题提到的“Base64编码转换工具”中,我们主要讨论的是一个用C#语言开发的小型应用程序,该程序能够方便地实现Base64编码与普通文本之间的相互转换。 Base64编码的基本原理是将每3个字节(24位)的数据分成4组,...

    base64编码解码

    总之,Base64编码解码是计算机网络通信中不可或缺的一部分,尤其在处理二进制数据和跨平台兼容性问题时。提供的`base64.dll`和其函数说明,为开发者提供了一种方便的工具,使他们在各种开发环境下都能轻松实现Base64...

    BASE64编码解码

    这个标题所指的“BASE64编码解码”是一款用C#语言编写的软件,专门用于对数据进行BASE64的编码和解码操作。由于C#是微软开发的一种面向对象的编程语言,因此这款软件可能依赖于.NET框架,特别是提到的.NET 1.1环境,...

    c#中 base64字符串与普通字符串互转

    在C#编程语言中,Base64是一种用于将二进制数据编码为ASCII字符串的机制,以便在不支持二进制传输的系统(如电子邮件)中传输。Base64编码可以将任何二进制数据转换为可打印的字符,包括图片、文件和其他非文本数据...

    base64编码解码工具源码

    在这个“base64编码解码工具源码”中,我们可以期待找到一个实现了Base64编码和解码功能的应用程序。这个工具具有用户界面,使得非技术用户也能方便地对数据进行编码和解码操作。用户界面可能包含输入框用于输入待...

    base64 Base64编码 .NET C#

    本篇文章介绍了如何在.NET和C#环境中使用Base64编码进行字符串和文件的编码及解码。这些方法对于开发人员来说是非常实用的工具,可以在处理网络传输、数据存储等方面发挥重要作用。通过对这些代码的理解和实践,可以...

    C#使用base64对字符串进行编码和解码的测试

    总体而言,本文详细介绍了如何在C#中利用.NET框架的功能进行Base64编码和解码操作,包括必要的命名空间引入、编码与解码方法的实现、测试方法的编写,以及如何通过测试来验证编码和解码的正确性。这些知识对于开发者...

Global site tag (gtag.js) - Google Analytics