根据RFC4648,C#:base64url

Dun*_*ken 8 c# base64 urlencode url-encoding

我正在根据C#中的RFC4648寻找base64url的(快速)标准实现.

我发现HttpServerUtility.UrlTokenEncode但看起来这并不遵循RFC4648(UrlTokenEncode在末尾添加一个数字,表示=已删除的符号数量;请参阅此处此处).

例:

base64编码:

Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes( "AA")); //返回"QUE ="

base64url编码:

HttpServerUtility.UrlTokenEncode(System.Text.Encoding.ASCII.GetBytes( "AA")); //返回"QUE1",但我希望"QUE"

Jon*_*eet 8

根据评论,除了填充的额外字符之外,它听起来HttpServerUtility.UrlTokenEncode是正确的.所以你应该能够做到:

string customBase64 = HttpServerUtility.UrlTokenEncode(data);
string rfc4648 = customBase64.Substring(0, customBase64.Length - 1);
Run Code Online (Sandbox Code Playgroud)

但是,您应该添加单元测试以检查它是否确实使用RFC 4648字母表(并且与RFC 4648相同).文档如此稀疏有点令人惊讶:(

  • 添加了要点[Base64UrlExtensions](https://gist.github.com/dariusdamalakas/b9570c36481aea6dd24d),希望这对任何人都有用.这有编码和解码作为`string`的扩展. (3认同)
  • 如果你想解码(`UrlTokenDecode`)Jon的`rfc4648`,你需要再次添加额外的字符:`if(rfc4648.Length%4!= 0)rfc4648 + =(4 - rfc4648.Length%4);` (2认同)