C# Convert.ToBase64String(字节[])和HttpServerUtility.UrlTokenEncode(字节[])之间有什么区别?
我正试图从一个Web API项目中消除对C# Convert.ToBase64String(字节[])和HttpServerUtility.UrlTokenEncode(字节[])之间有什么区别?,c#,base64,system.web,C#,Base64,System.web,我正试图从一个Web API项目中消除对System.Web.dll的依赖,但无意中发现了一个调用(及其相应的解码方法),我不知道用什么替换它以确保向后兼容性。文件上说这种方法 使用基本64位数字将字节数组编码为其等效的字符串表示形式,可用于在URL上传输 我试着用替换(及其相应的解码方法),这与文档中的描述非常相似: 将由8位无符号整数组成的数组转换为其等效的字符串表示形式,该表示形式使用以64位为基数的数字进行编码 然而,它们似乎并不完全相同;当使用Convert.FromBase64Str
System.Web.dll
的依赖,但无意中发现了一个调用(及其相应的解码方法),我不知道用什么替换它以确保向后兼容性。文件上说这种方法
使用基本64位数字将字节数组编码为其等效的字符串表示形式,可用于在URL上传输
我试着用替换(及其相应的解码方法),这与文档中的描述非常相似:
将由8位无符号整数组成的数组转换为其等效的字符串表示形式,该表示形式使用以64位为基数的数字进行编码
然而,它们似乎并不完全相同;当使用Convert.FromBase64String(字符串输入)
对使用HttpServerUtility
编码的字符串进行解码时,我得到一个异常
输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符
这两个转换实用程序之间的区别是什么?消除对System.Web.HttpServerUtility
的依赖的正确方法是什么?
一些用户建议这是的复制品,但我不同意。这个问题通常是关于base-64以url安全的方式对字符串进行编码,但我需要重现
HttpServerUtility
的确切行为,但不依赖于System.Web
HttpServerUtility.urltokencode(byte[]input)
将对url安全的Base64字符串进行编码。在Base64+中,/和=字符有效,但它们不是URL安全的,此方法将替换这些字符,而Convert.ToBase64String(byte[]input)
将不替换这些字符。你也许可以删除引用,自己做
通常,“+”被替换为“-”,而“/”被替换为“u”padding“=”则被删除
这里接受的答案给出了一个代码示例:我用DGIBB的单词和。在
HttpServerUtility
方法中会发生以下情况:
编码到Base64
System.Convert
将输入转换为Base64+
替换为-
,/
替换为.
。示例:Foo+bar/==
变成Foo-bar
=
替换为一个整数,表示它们的数量。示例:Foo-bar==
变成Foo-bar\u3
=
符号替换字符串末尾的数字。示例:Foo-bar\u 3
变为Foo-bar\u==
+
替换-
,用/
替换
。示例:Foo-bar==
变成Foo+bar/==
System.Convert
对来自Base64的预处理输入进行解码你可以看一看,可能会有一些启发。可能的重复事实上并不完全正确。填充
=
不会被删除,而是被一个表示计数的整数替换。换句话说,blah==
变成blah2
,而不是blah
。(通过查看源代码发现了这一点)。还应注意,末尾的数字是必需的,即无=
符号将0
附加到输出/从输入解释。