Base64编码简介
Base编码使用"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",再加上补齐长度的1个或2个"="号,共计65种字符
Base64编码后在Url中传递
查看Base64中的65种字符,其中有"="与"+"在Query String有特殊含意
"="用来连接参数名与其值
例如:..........?a=XY=Z, 则Request.QueryString["a"] 还能识别出来
"+"用来表示" "(空格)
例如:..........?a=X+Y, 则Request.QueryString["a"]的结果会变为"X Y"
这样经过Url传递后解码可能会出错
另有"/"是Url中的目录符号,也不能直接出现在Url中
要在Url中传值,就必须将+、/、=替换掉。用来替换的字符只要是非Base64字符即可,也就是不在那65个字符中。
下面示例代码用的是*、-、. (当然也可以用~、^等字符)
/// <summary>
/// 从适用于URL的Base64编码字符串转换为普通字符串
/// </summary>
public static string FromBase64StringForUrl(string base64String)
{
string temp = base64String.Replace('.', '=').Replace('*', '+').Replace('-', '/');
return Encoding.UTF8.GetString(Convert.FromBase64String(temp));
} /// <summary>
/// 从普通字符串转换为适用于URL的Base64编码字符串
/// </summary>
public static string ToBase64StringForUrl(string normalString)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(normalString)).Replace('+', '*').Replace('/', '-').Replace('=', '.');
}