gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:00:56 24 4
gpt4 key购买 nike

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

Encodes a byte array into its equivalent string representation using base 64 digits, which is usable for transmission on the URL.

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

Converts an array of 8-bit unsigned integers to its equivalent string representation that is encoded with base-64 digits.

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

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

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


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

最佳答案

我相信了 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 的预处理输入。

关于c# - Convert.ToBase64String(byte[]) 和 HttpServerUtility.UrlTokenEncode(byte[]) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35430084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com