加密算法C#实现:Base64编码

1.1 原理介绍

(1)Base64是一种基于64个可打印字符来表示二进制数据的表示方法。其索引表如下:.

加密算法C#实现:Base64编码

  共包含64个可打印字符为:A-Z、a-z、0-9、+、/,另外还会有“=”或者“==”作为填充字符出现在编码中。

(2)编码规则

  1. 将待编码字符串每三个字节分为一组,每组24bit

  2. 将上边的24bit分为4组,每组6bit

  3. 在每组前添加两个0,每组由6bit变为8bit,总共32bit,即4byte

  4. 根据Base64编码对照表获取对应的编码值

加密算法C#实现:Base64编码

  上述图例中:“Man”经过Base64编码之后变为“TWFu”。

(3)字节数不足3个时

加密算法C#实现:Base64编码

  • 两个字节:2byte共16bit,按照编码规则,每6bit分为一组,则第三组缺少2bit,用0补齐,得到3个Based64编码,第四组完全没有数据则用“=”补上。因此上图“BC”经过Base64编码之后变为“QkM=”;

  • 一个字节:1byte共8bit,按照编码规则,每6bit分为一组,则第二组缺少4bit,用0补齐,得到2个Based64编码,后两组完全没有数据都用“=”补上。因此上图“A”经过Base64编码之后变为“QQ==”。

1.2 C#代码

// Base64编码
public sealed class Base64
{
    // Base64加密
    public static string Base64Encrypt(string plaintext)
    {
        string ciphertext = "";
        byte[] buffer = Encoding.ASCII.GetBytes(plaintext);
        ciphertext = Convert.ToBase64String(buffer);
        return ciphertext;
    }
    // Base64解密
    public static string Base64Decrypt(string ciphertext)
    {
        string plaintext = "";
        byte[] buffer = Convert.FromBase64String(ciphertext);
        plaintext = Encoding.ASCII.GetString(buffer);
        return plaintext;
    }
}