我想对数据进行base64编码,将其放入一个网址中,然后在我的HttpHandler中对其进行解码。
我发现Base64 Encoding允许使用'/‘字符,这会使我的UriTemplate匹配变得混乱。然后我发现维基百科上有一个“网址的修改Base64”的概念:
存在用于URL变体的修改的URL,其中将不使用填充'=‘,并且标准Base64的'+’和'/‘字符分别被替换为'-’和'_',因此不再需要使用Base64编码器/解码器,并且不影响编码值的长度,从而使相同的编码形式保持不变,以便在关系数据库、网页表单和对象标识符中使用。
使用.NET,我想将我当前的代码从进行基本的base64编码和解码改为使用"modified 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条目,但它的长度是已知的,因此它们可以硬编码末尾所需的等号数量。
发布于 2009-08-04 17:06:33
这应该正确地填充它:-
base64 = base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=');
发布于 2015-10-14 06:40:00
没有足够的要点可供评论,但如果有用,Sushil在提供的链接中找到的代码片段(JSON Web Signature ietf draft)在将Base64编码为URL中的参数时可以使用。
为那些懒惰的人复制了下面的代码片段:
static string Base64UrlEncode(byte[] arg)
{
string s = Convert.ToBase64String(arg); // Regular base64 encoder
s = s.Split('=')[0]; // Remove any trailing '='s
s = s.Replace('+', '-'); // 62nd char of encoding
s = s.Replace('/', '_'); // 63rd char of encoding
return s;
}
static byte[] Base64UrlDecode(string arg)
{
string s = arg;
s = s.Replace('-', '+'); // 62nd char of encoding
s = s.Replace('_', '/'); // 63rd char of encoding
switch (s.Length % 4) // Pad with trailing '='s
{
case 0: break; // No pad chars in this case
case 2: s += "=="; break; // Two pad chars
case 3: s += "="; break; // One pad char
default: throw new System.Exception(
"Illegal base64url string!");
}
return Convert.FromBase64String(s); // Standard base64 decoder
}
发布于 2013-01-16 16:23:14
我在寻找用于base64url编码的编码/解码的代码时遇到了这里,正如问题中所解释的那样,它与base64没有什么不同。
在此文档中找到c#代码片段。JSON Web Signature ietf draft
https://stackoverflow.com/questions/1228701
复制相似问题