【发布时间】:2010-11-16 18:06:23
【问题描述】:
我想对数据进行 base64 编码以将其放入 URL 中,然后在我的 HttpHandler 中对其进行解码。
我发现Base64 Encoding 允许使用“/”字符,这会弄乱我的 UriTemplate 匹配。然后我从维基百科发现有一个“为 URL 修改 Base64”的概念:
存在一个修改过的 Base64 for URL 变体,其中不使用填充“=”,标准 Base64 的“+”和“/”字符分别替换为“-”和“_”,以便使用 URL不再需要编码器/解码器,并且对编码值的长度没有影响,保持相同的编码形式完好无损,可用于一般的关系数据库、Web 表单和对象标识符。
使用 .NET 我想将我当前的代码从进行基本的 base64 编码和解码修改为使用“修改后的 base64 for URL”方法。有人做过吗?
要解码,我知道它从以下内容开始:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
但是,我可能需要在末尾添加一两个“=”字符,这看起来有点复杂。
我的编码逻辑应该简单一点:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
我见过Guid to Base64 for URL StackOverflow 条目,但它的长度是已知的,因此他们可以硬编码最后所需的等号数量。
【问题讨论】:
标签: c# url base64 encode decode