Base64算法的过程

发布于 2022-09-01 19:29:35 字数 1792 浏览 13 评论 0

       /// <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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千里故人稀 2022-09-08 19:29:35

百度百科的截图,也就是楼上说的 = 号的问题:

clipboard.png

我想回答这个问题……实在是因为看见这么渣的代码忍不下去啊……
这是哪个 ****************** 写的????
代码分明只需要这么简单而已好么!!!

public static string Base64_URL_Encode(string Source)
{
return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Source)).Replace("+","-").Replace("/","_");
}
public static string Base64_URL_Decode(string Source)
{
return System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(Source.Replace("-", "+").Replace("_", "/")));
}
    

楼上虽然说得很有道理,不过实际的情况是,C#已经处理好了 = 号的问题,根本不需要多此一举好么!!!

clipboard.png

所以说,这么渣的代码,是哪个****************** 写的!!!!
赶紧删掉,赶紧删掉,毁尸灭迹。。。
别再放出来毒害别人了。。。

度的依靠╰つ 2022-09-08 19:29:35

Base64会以3字节为单位将其转换成4个64进制的ASCII字符,也就是3字节->4字节。这样一来,如果原来的字符串的字节数并不是3的整数倍,就会导致转换后的字节数不是4的整数倍,这在有些解码实现里是会出错的,所以安全的做法是始终让转换后的字节数为4的整数倍,方法是在最后补上=字符。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文