C#:根据RFC4648的base64url
我正在根据C#中的说明寻找base64url的(快速)标准实现 我找到了,但看起来这不符合RFC4648(UrlTokenEncode在末尾添加了一个数字,表示删除的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
=
符号的数量;请参阅和)
例如:
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在那里不存在。