关于base64:C#Byte []到Url Friendly String

C# Byte[] to Url Friendly String

我正在为一个简单的站点开发一个快速的验证码生成器,我希望在页面的URL中传递一个加密密钥。我可以很容易地将其作为一个查询字符串参数来执行,但我希望不会这样做(只是因为没有其他任何东西会从查询字符串中流出)。

我的加密代码生成一个byte[],然后使用convert.tobase64string(byte[])将其转换为字符串。然而,这个字符串仍然不太适合URL,因为它可以包含诸如"/"和"="之类的内容。有人知道.NET框架中更好的函数可以将字节数组转换为URL友好字符串吗?

我对system.web.httputility.urlencode()及其等价物了如指掌,但它们只适用于查询字符串参数。如果我的URL在路径中编码了"=",我的Web服务器会返回一个400错误的请求错误。

不管怎样,不是关键问题,但希望有人能给我一个好的解决方案

**编辑:为了完全确定我对字符串的操作,我想我会提供更多的信息。

我的加密算法产生的字节[]应该通过某种算法输入,使其成为一个URL友好的字符串。在此之后,它将成为Xelement的内容,Xelement随后用作XSLT转换的源文档,并用作锚定的href属性的一部分。我不认为XSLT转换导致了这些问题,因为路径上的内容似乎是一个编码的查询字符串参数,但会导致HTTP 400

我还尝试过在base64字符串上使用httputility.urlPathencode(),但这似乎也不起作用(我的url中仍然有"/")。*


你要找的是HttpServerUtility.UrlTokenEncodeHttpServerUtility.UrlTokenDecode,在System.Web中。

它们以base64编码,将潜在危险的"+"和"/"字符替换为"-"和"u"。

MSDN文档


看看System.Bitconverter.ToString(MyBytearray)

对于像哈希这样的单向编码很方便,但是正如ssg所指出的那样,它不是很有效。对于大量的数据,我不推荐使用它。