一尘不染

用于对修改后的base64 URL进行解码/编码的代码

c#

我想对数据进行base64编码,以将其放入URL,然后在我的HttpHandler中对其进行解码。

我发现Base64编码允许使用’/’字符,这会弄乱我的UriTemplate匹配。然后,我发现维基百科有一个“
URL的修改的Base64”概念:

存在针对URL变体的经过修改的Base64,其中将不使用填充’=’,并且标准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指南,但是它的长度是已知的,因此它们可以对最后所需的等号进行硬编码。


阅读 257

收藏
2020-05-19

共1个答案

一尘不染

这应该正确地填补它:-

 base64 = base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=');
2020-05-19