Convert.ToBase64String(byte[]) 和 HttpServerUtility.UrlTokenE

本文关键字:HttpServerUtility UrlTokenE ToBase64String byte Convert | 更新日期: 2023-09-27 18:34:51

我正在尝试从 Web API 项目中删除对System.Web.dll的依赖,但偶然发现了对 HttpServerUtility.UrlTokenEncode(byte[] input)(及其相应的解码方法(的调用,我不知道用什么替换以确保向后兼容性。文档说这种方法

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

我尝试用Convert.ToBase64String(byte[] input)(及其相应的解码方法(替换,这在文档中的描述非常相似:

将 8 位无符号整数数组转换为用 base 64 数字编码的等效字符串表示形式。

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

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

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


一些用户建议这是这个的副本,但我不同意。这个问题是关于通常以 url 安全的方式对字符串进行 base-64 编码,但我需要重现HttpServerUtility确切行为,但不依赖于 System.Web .

Convert.ToBase64String(byte[]) 和 HttpServerUtility.UrlTokenE

我把DGibbs的话放在他们的话上,并使用了源代码。事实证明,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 的预处理输入。

HttpServerUtility.UrlTokenEncode(byte[] input)将编码一个URL安全的Base64字符串。在 Base64 + 中,/和 = 字符有效,但它们不是 URL 安全的,此方法将替换这些字符,而Convert.ToBase64String(byte[] input)不会。您可以删除引用并自己执行。

通常,"+"被替换为">

-",而"/"被替换为"_"填充"="只是被删除。

这里接受的答案给出了一个代码示例:如何在 C# 中实现 Base64 URL 安全编码?

相关文章:
  • 没有找到相关文章