我想base64编码数据把它放在一个URL中,然后在我的HttpHandler中解码它 .
我发现Base64 Encoding允许使用'/'字符,这会弄乱我的UriTemplate匹配 . 然后我发现维基百科有一个"modified Base64 for URL"的概念:
存在修改的URL变体Base64,其中不使用填充'=',标准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条目,但它具有已知长度,因此它们可以硬编码最后所需的等号数 .
5 回答
这应该正确填写: -
同时使用处理URL安全Base64编码和解码的UrlTokenEncode和UrlTokenDecode方法检查类 HttpServerUtility .
Note 1: The result is not a valid Base64 string. Some unsafe characters for URL are replaced.
Note 2: The result differs from the base64url algorithm in RFC4648.
没有足够的评论点,但如果有帮助,Sushil在提供的链接中找到的代码片段(JSON Web Signature ietf draft)适用于将Base 64编码为URL中的参数 .
下面复制的片段用于懒惰:
我在寻找代码进行base64url编码的编码/解码时遇到了这里,这与base64有点不同,如问题所述 .
在本文档中找到了c#代码段 . JSON Web Signature ietf draft
与接受的答案相比,以下是使用C#从根本上解码base64编码的URL的方法:
Decode: