我想在C#中实现Base64 URL安全编码.在Java中,我们有一个公共Codec库,它为我提供了一个URL安全编码字符串.如何使用C#实现相同的目标?
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode");
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
Run Code Online (Sandbox Code Playgroud)
上面的代码将它转换为Base64,但它填充==.有没有办法实现URL安全编码?
我有一个字节数组,我想存储为字符串.我可以这样做:
byte[] array = new byte[] { 0x01, 0x02, 0x03, 0x04 };
string s = System.BitConverter.ToString(array);
// Result: s = "01-02-03-04"
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.有谁知道我怎么回到阵列?没有BitConverter.GetBytes()的重载,它接受一个字符串,这似乎是一个讨厌的解决方法,将字符串分解为一个字符串数组,然后转换它们中的每一个.
所讨论的数组可以是可变长度的,可能是大约20个字节.
我正在尝试对Url中的加密ID进行编码.像这样:http://www.calemadr.com/Membership/Welcome/9xCnCLIwzxzBuPEjqJFxC6XJdAZqQsIDqNrRUJoW6229IIeeL4eXl5n1cnYapg+N
但是,它要么没有正确编码,我在加密中得到斜杠"/",或者我收到来自IIS的错误:请求过滤模块配置为拒绝包含双转义序列的请求.
我尝试了不同的编码,每个都失败了:
更新
问题是当我加密Guid并将其转换为base64字符串时,它将包含不安全的url字符.当然,当我试图导航到包含不安全字符的URL时,IIS(7.5/windows 7)会爆炸.Url编码base64加密字符串会引发IIS中的错误(请求过滤模块配置为拒绝包含双转义序列的请求.).我不确定它是如何检测双重编码的字符串但它确实如此.
尝试上述方法后编码base64加密字符串.我决定删除base64编码.但是,这会将加密文本保留为byte [].我尝试了UrlEncoding byte [],这是挂起httpUtility.Encode方法的重载之一.同样,虽然它是URL编码,但IIS不喜欢它,并提供了"找不到页面".
在网上挖掘后,我遇到了一个HexEncoding/Decoding类.将Hex编码应用于加密字节就可以了.输出是url安全的.另一方面,我对解码和解密十六进制字符串没有任何问题.
我想在ASP.NET中混淆一个查询字符串参数.该站点将有大量请求,因此算法不应该太慢.
我的问题是我找到的所有算法都会产生不需要的字符(比如+/=)
这是我想要实现的一个例子:
www.domain.com/?id=1844
Run Code Online (Sandbox Code Playgroud)
至
www.domain.com/?id=3GQ5DTL3oVd91WsGj74gcQ
Run Code Online (Sandbox Code Playgroud)
混淆的参数应该只包括az和AZ以及0-9个字符.
我知道我可以使用base64进行加密,但这会生成不需要的字符,例如/or =或+.
知道可以使用什么算法吗?
更新: 我知道UrlEncoding,我想避免编码字符串.因为这会在网址中生成%F2或%B2等字符.