首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于解码/编码修改后的base64 URL的代码

用于解码/编码修改后的base64 URL的代码
EN

Stack Overflow用户
提问于 2009-08-05 00:58:54
回答 3查看 98.6K关注 0票数 121

我想对数据进行base64编码,将其放入一个网址中,然后在我的HttpHandler中对其进行解码。

我发现Base64 Encoding允许使用'/‘字符,这会使我的UriTemplate匹配变得混乱。然后我发现维基百科上有一个“网址的修改Base64”的概念:

存在用于URL变体的修改的URL,其中将不使用填充'=‘,并且标准Base64的'+’和'/‘字符分别被替换为'-’和'_',因此不再需要使用Base64编码器/解码器,并且不影响编码值的长度,从而使相同的编码形式保持不变,以便在关系数据库、网页表单和对象标识符中使用。

使用.NET,我想将我当前的代码从进行基本的base64编码和解码改为使用"modified base64 for URL“方法。有人这么做过吗?

为了解码,我知道它是这样开始的:

代码语言:javascript
复制
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');

// Append '=' char(s) if necessary - how best to do this?

// My normal base64 decoding now uses encodedText

但是,我可能需要在末尾添加一个或两个'=‘字符,这看起来有点复杂。

我的编码逻辑应该简单一点:

代码语言:javascript
复制
// 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条目,但它的长度是已知的,因此它们可以硬编码末尾所需的等号数量。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-04 17:06:33

这应该正确地填充它:-

代码语言:javascript
复制
 base64 = base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=');
票数 79
EN

Stack Overflow用户

发布于 2015-10-14 06:40:00

没有足够的要点可供评论,但如果有用,Sushil在提供的链接中找到的代码片段(JSON Web Signature ietf draft)在将Base64编码为URL中的参数时可以使用。

为那些懒惰的人复制了下面的代码片段:

代码语言:javascript
复制
    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
    }
票数 35
EN

Stack Overflow用户

发布于 2013-01-16 16:23:14

我在寻找用于base64url编码的编码/解码的代码时遇到了这里,正如问题中所解释的那样,它与base64没有什么不同。

在此文档中找到c#代码片段。JSON Web Signature ietf draft

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1228701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档