首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Convert.ToBase64String(byte[])和HttpServerUtility.UrlTokenEncode(byte[])有什么区别?

Convert.ToBase64String(byte[])和HttpServerUtility.UrlTokenEncode(byte[])有什么区别?
EN

Stack Overflow用户
提问于 2016-02-16 10:32:53
回答 2查看 6.6K关注 0票数 11

我试图从Web项目中删除对System.Web.dll的依赖,但是无意中发现了对[HttpServerUtility.UrlTokenEncode(byte[] input)](https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urltokenencode(v=vs.110%29.aspx) (及其相应的解码方法)的调用,我不知道该用什么替换以确保向后兼容性。文件上说这个方法

使用基本64位数字将字节数组编码为其等效的字符串表示形式,可用于在URL上传输。

我尝试用[Convert.ToBase64String(byte[] input)](https://msdn.microsoft.com/en-us/library/dhx0d524(v=vs.110%29.aspx) (及其相应的解码方法)替换,这在文档中有非常类似的描述:

将由8位无符号整数组成的数组转换为其等效字符串表示形式,该字符串表示形式由基-64位数字编码。

然而,它们似乎并不完全等价;当使用Convert.FromBase64String(string input)解码用HttpServerUtility编码的字符串时,我会得到一个异常

输入不是有效的基- 64字符串,因为它包含一个非基本的64个字符、两个以上的填充字符或填充字符中的一个非法字符。

这两个转换实用程序之间有什么区别?消除对System.Web.HttpServerUtility**?**的依赖的正确方法是什么?

一些用户认为这是this one的翻版,但我不同意。这个问题是关于通常以url安全的方式编码字符串的基数64,但我需要重现HttpServerUtility的确切行为,但不依赖于System.Web

EN

回答 2

Stack Overflow用户

发布于 2016-02-16 14:51:58

我相信了DGibbs和Used Source。结果表明,在HttpServerUtility方法中发生了以下情况:

编码到Base64

  1. 使用System.Convert将输入转换为Base64。
  2. +替换为-/替换为_。示例:Foo+bar/===变成Foo-bar_===
  3. 将字符串末尾的任意数量的=替换为表示它们是多少的整数。示例:Foo-bar_===变成Foo-bar_3

从Base64解码

  1. 用相同数量的=符号替换字符串末尾的数字。示例:Foo-bar_3变成Foo-bar_===
  2. -替换为+_替换为/。示例:Foo-bar_===变成Foo+bar/===
  3. 使用System.Convert解码来自Base64的预处理输入。
票数 16
EN

Stack Overflow用户

发布于 2016-02-16 10:53:09

HttpServerUtility.UrlTokenEncode(byte[] input)将编码一个URL安全Base64字符串。在Base64 +中,/ and =字符是有效的,但它们不是URL安全的,此方法将替换这些字符,而Convert.ToBase64String(byte[] input)则不会。你也许可以放弃引用,自己去做。

通常,'+‘被'-’和'/‘替换为'_’填充'=‘只是删除。

这里接受的答案给出了一个代码示例:How to achieve Base64 URL safe encoding in C#?

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

https://stackoverflow.com/questions/35430084

复制
相关文章

相似问题

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