C#:根据RFC4648的base64url

C#:根据RFC4648的base64url,c#,base64,urlencode,url-encoding,C#,Base64,Urlencode,Url Encoding,我正在根据C#中的说明寻找base64url的(快速)标准实现 我找到了,但看起来这不符合RFC4648(UrlTokenEncode在末尾添加了一个数字,表示删除的=符号的数量;请参阅和) 例如: base64编码: Convert.tobase64字符串(System.Text.Encoding.ASCII.GetBytes(“AA”)//返回“QUE=” base64url编码: HttpServerUtility.UrlTokenEncode(System.Text.Encoding.A

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

我找到了,但看起来这不符合RFC4648(UrlTokenEncode在末尾添加了一个数字,表示删除的
=
符号的数量;请参阅和)

例如:

base64编码:

Convert.tobase64字符串(System.Text.Encoding.ASCII.GetBytes(“AA”)//返回“QUE=”

base64url编码:

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


根据注释,它听起来像是
System.Web.HttpServerUtility.urltokencode
做了正确的事情,除了额外的填充字符。因此,您应该能够做到:

string customBase64 = HttpServerUtility.UrlTokenEncode(data);
string rfc4648 = customBase64.Substring(0, customBase64.Length - 1);

但是,您应该添加单元测试来检查它是否真的使用了RFC4648字母表(并且使用与RFC4648相同的方式)。有些令人惊讶的是,文档如此稀少:(

而不仅仅是说“它看起来像”你能举一个例子说明它的作用和你的期望吗?@JonSkeet:对不起,我刚刚添加了我的担忧…它仍然相当模糊。请给出一个具体的例子:包含样本数据的样本代码,带有实际输出和预期输出。请阅读@JonSkeet:好的,我添加了一个预期结果的示例。简单的解决方案-只需删除即可使用
子字符串的结果的最后一个字符。有什么问题吗?如果要解码(
urltokedecode
)Jon的
rfc4648
,则需要再次添加额外字符:
如果(rfc4648.Length%4!=0)rfc4648+=(4-rfc4648.Length%4)
@Dunken:我认为不管长度如何,都应该添加它-但是如果不是4,则应该添加0。添加了要点,希望这对任何人都有用。这在
字符串上既有编码,也有解码作为扩展。
@Darius在.NET内核中似乎不起作用,HttpServerUtility在那里不存在。