我想对数据进行 base64 编码以将其放入 URL 中,然后在我的 HttpHandler 中对其进行解码。
我发现Base64 编码允许使用“/”字符,这会弄乱我的 UriTemplate 匹配。然后我发现维基百科中有一个“修改后的Base64 for URL”的概念:
存在一个修改过的 Base64 for URL 变体,其中不使用填充“=”,标准 Base64 的“+”和“/”字符分别替换为“-”和“_”,以便使用 URL 编码器/解码器不再需要并且对编码值的长度没有影响,从而使相同的编码形式保持不变,以便在关系数据库、Web 表单和一般对象标识符中使用。
使用 .NET 我想修改我当前的代码,从进行基本的 base64 编码和解码到使用“为 URL 修改 base64”方法。有人做过吗?
要解码,我知道它从以下内容开始:
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('/', '_');
我已经看到了用于 URL StackOverflow 条目的 Base64 的 Guid,但它的长度是已知的,因此他们可以硬编码最后需要的等号数量。