博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
base64编码
阅读量:6233 次
发布时间:2019-06-22

本文共 1534 字,大约阅读时间需要 5 分钟。

一、  BASE64编码

byte[]中的元素当做无符号八位整数转换成只含有64个基本字符的字符串,这些基本字符是:

         大写的A-Z

         小写的a-z

         数字0-9

         '+' 和 '/'

 

64个字符构成BASE64的字符集。‘=’,为填充字符,结尾处可以填充0-2个填充字符

 

Base64是将原文按照每 3 个字节一组分开,这个 3 字节组中的每一组将被按照位分解成 4 个部分,每个部分 6 个位,在这 4 个部分的每个部分高位加上 2 个 0构成一个新的 4 字节组,新的字节组中,每个字节只有 6 位,能表示64个值。

在原文在转换为BASE64编码时,试是以3个字节为一组转换成4字节一组的BASE64编码。如果原文不是三字节的倍数,可能多出一个字节和两个字节,分别会被转为2字节和3字节的BASE64编码,这时编码系统应该在形成的BASE64编码最后添加上填充符=,保证BASE64编码长度是4的倍数。所以在BASE64编码后添加的填充符=可能为0-2个。

Byte[]BASE64之间的转换纯粹就是表现形式的一种转换,它们之间有直接的对应关系,不涉及到使用何种代码页的问题,BASE64表达的也是字节流。

实际应用中,dotnet提供的两个主要的BASE64方法Convert.ToBase64String 和Convert.FromBase64String,并不是把Byte[]直接转成相应的BASE64的字节流,而是转换成unicode的等价字符串,就是base64的值对应的字符在unicode的等价字符。
如果要把BASE64的等价字符串转成Byte[],还是需要指定一个代码页然后按照指定的编码转成Byte[]

 

二、  Byte[]BASE64之间的转换操作

static void Main(string[] args)

{

    string factString = "中华人民共和国";

    byte[] myByte;

    string Base64Str;

    //先把字符串按照utf-8的编码转换成byte[]

    Encoding myEncoding = Encoding.GetEncoding("utf-8");

    //myByte中获得这样的字节数组:228,184,173,229,141,142,228,186,186,230,176,145,229,133,177,229,146,140,229,155,189

    myByte = myEncoding.GetBytes(factString);

    //byte[]转成base64编码,这个例子形成的base64编码的unicode等价字符串为:"5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9"

    Base64Str = Convert.ToBase64String(myByte);

    //再从base64编码转成byte[],又恢复为字节数组:228,184,173,229,141,142,228,186,186,230,176,145,229,133,177,229,146,140,229,155,189

    myByte = Convert.FromBase64String(Base64Str);

    //用同一个Encoding对象把byte[]转成字符串:"中华人民共和国"

    factString = myEncoding.GetString(myByte);

    Console.WriteLine(factString);

}

转载于:https://www.cnblogs.com/08shiyan/archive/2011/11/01/2231315.html

你可能感兴趣的文章
!+"\v1" 用来“判断浏览器类型”还是用来“IE判断版本”的问题!
查看>>
javascript之Style物
查看>>
C# 公历转农历
查看>>
LeetCode - Divide Two Integers
查看>>
去掉 “当前安全设置会使计算机有风险”提示
查看>>
sql 聚合函数
查看>>
ABP源码分析二十:ApplicationService
查看>>
学习OpenCV——BOW特征提取函数(特征点篇)
查看>>
帮你店铺日销千单的20个淘宝小技巧
查看>>
python deep copy and shallow copy
查看>>
I.MX6 Ethernet MAC (ENET) MAC Address hacking
查看>>
下载本 WebEnh博客 安卓APP
查看>>
iOS中常见 Crash 及解决方案
查看>>
【python】datetime获取日期,前一天日期
查看>>
Lua简易入门教程
查看>>
如果使用百度云盘同步电脑里文件夹
查看>>
linux内核栈与用户栈【转】
查看>>
一次完整的http事务
查看>>
spring事务传播机制
查看>>
freemaker
查看>>