manbetx官方网站

URL安全之Base64编码。让Base64适合在URL中利用。

十月 18th, 2018  |  manbet体育登录

Base64编码可用来在HTTP环境下传递较丰富之标识信息。在任何应用程序中,也时时需要把二进制数据编码为契合放在URL(包括隐藏表单域)中的样式。此时,采用Base64编码不仅于简单,同时也保有不可读性,即所编码的数额不会见于人就此肉眼所一直看看。

    采用 Base64
编码不仅于简单,同时拥有不可读性,被编码的数目不见面为人就此肉眼所一直看看。
但是,标准的 Base64 并无入直接放在 URL 里应用,因为Base64中带有’+’ 和
‘/’, URL 编码器会 ‘+’ 和 ‘/’ 变为显示如 “%XX” 的款型。
    修改一下Base64哪怕可以于URL中动用了:

而是,标准的Base64并无入直接在URL里传输,因为URL编码器会管标准Base64中之「/」和「+」字符变为形如「%XX」的花样,而这些「%」号于存入数据库时还欲更展开换,因为ANSI
SQL遭逢早就将「%」号用作通配符。

/// <summary>
/// Base64 转换 UrlBase64,使之切当url中使
/// </summary>
public static string Base64ToUrlBase64(string base64str)
{
    // “+” 换成 “-A”
    // “/” 换成 “-S”
    // 去掉 “=”
    return base64str.Replace(“+”, “-A”).Replace(“/”, “-S”).Replace(“=”, string.Empty);
}

为化解这问题,可采取同样种用于URL的改进Base64编码,它不以结尾填充’=’号,并拿标准Base64中的「+」和「/」分别改化了「*」和「-」,这样便无去矣以URL编解码和数据库存储时所假设作的转换,避免了编码信息长度在是过程被的加码,并统一了数据库、表单等处目标标识符的格式。

/// <summary>
/// UrlBase64 转换 Base64
/// </summary>
public static string UrlBase64ToBase64(string urlBase64str)
{
    // “-A” 换成 “+”
    // “-S” 换成 “/”
    string str = urlBase64str.Replace(“-A”, “+”).Replace(“-S”, “/”);

URL安全的Base64编码适用于坐URL方式传送Base64编码结果的光景。该编码方式的基本过程是先用内容为Base64格式编码为字符串,然后检查该结果字符串,将字符串中之加号+交换中划线-,并且用斜杠/交换下划线_

    // 添加”=”
    int mod = str.Length % 4;
    if (mod != 0)
    {
        str += new string(‘=’, 4 – mod);
    }
    return str;
}

详尽编码规范请参见RFC4648正规被的相干描述。

哪,UrlBase64在URL使用大便利吧!

填补:对于最后的“=”占位符,Bouncy Castle将的故.代替,而Commons
Codes杜绝任何的补位符。下面的以身作则代码应用了Bouncy
Castle的法门,将“=”用“.”代替。

用于URL的改进版Base64编码C#实现:

       /// <summary>
       /// 从第二上前制字符转换为适用于URL的Base64编码字符串
       /// < /summary>
       public static string ToBase64StringForUrl(byte[] token)
       {
           return Convert.ToBase64String(token).Replace(‘+’, ‘*’)
               .Replace(‘/’, ‘-‘)
               .Replace(‘=’, ‘.’);
       }

相关文章

标签:, ,

Your Comments

近期评论

    功能


    网站地图xml地图