Base64算法的过程
/// <summary>
/// encode : byte[] to byte[]
/// </summary>
/// <param name="src"></param>
/// <returns></returns>
public static byte[] urlsafeEncodeBytes(byte[] src)
{
if (src.Length % 3 == 0)
{
return encodeBase64Ex(src);
}
byte[] b = encodeBase64Ex(src);
if (b.Length % 4 == 0)
{
return b;
}
int pad = 4 - b.Length % 4;
byte[] b2 = new byte[b.Length + pad];
Array.Copy(b, 0, b2, 0, b.Length);
b2[b.Length] = (byte)'=';
if (pad > 1)
{
b2[b.Length + 1] = (byte)'=';
}
return b2;
}
/// <summary>
/// 进行url友好的base64-encode,replace '/' with '_', '+" with '-'
/// </summary>
/// <param name="src">byte[]</param>
/// <returns>byte[]</returns>
///
private static byte[] encodeBase64Ex(byte[] src)
{
string srcString = System.Convert.ToBase64String(src);
byte[] b64 = System.Text.Encoding.UTF8.GetBytes(srcString);
for (int i = 0; i < b64.Length; i++)
{
if (b64[i] == '/')
{
b64[i] = System.Convert.ToByte('_');
}
else if (b64[i] == '+')
{
b64[i] = System.Convert.ToByte('-');
}
}
return b64;
}
base64 url友好的编码难道不是用第二个方法 private static byte[] encodeBase64Ex(byte[] src) 就够了吗?
第一个方法 public static byte[] urlsafeEncodeBytes(byte[] src) 是干什么用的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
百度百科的截图,也就是楼上说的 = 号的问题:
我想回答这个问题……实在是因为看见这么渣的代码忍不下去啊……
这是哪个 ****************** 写的????
代码分明只需要这么简单而已好么!!!
楼上虽然说得很有道理,不过实际的情况是,C#已经处理好了 = 号的问题,根本不需要多此一举好么!!!
所以说,这么渣的代码,是哪个****************** 写的!!!!
赶紧删掉,赶紧删掉,毁尸灭迹。。。
别再放出来毒害别人了。。。
Base64
会以3字节为单位将其转换成4个64进制的ASCII字符,也就是3字节->4字节。这样一来,如果原来的字符串的字节数并不是3的整数倍,就会导致转换后的字节数不是4的整数倍,这在有些解码实现里是会出错的,所以安全的做法是始终让转换后的字节数为4的整数倍,方法是在最后补上=
字符。