C#方法类似Base64String,但只有字母数字(无加号或斜杠)

时间:2009-06-01 03:54:41

标签: c# encoding base64 alphanumeric

是否有任何C#方法与Convert.ToBase64String类似,但除了字母数字输出外不会生成任何内容?

谢谢!

6 个答案:

答案 0 :(得分:21)

答案现在有点过时了。为了未来的搜索者的利益:现在在C#中处理这个问题的最佳方法是:

byte[] b; // fill your byte array somehow
string s = System.Web.HttpServerUtility.UrlTokenEncode(b);

这将返回一个Base64编码的字符串,该字符串是URL安全的(这就是你在评论的评论中所说的那样)。

然后你可以再次解码它,你猜对了:

byte[] b = System.Web.HttpServerUtility.UrlTokenDecode(s);

答案 1 :(得分:12)

你可能正在考虑使用类似Base32编码的东西。 Michael Giagnocavo为C#here提供了Base32编码器/解码器。它使用大写字母和数字的组合。

还有一个关于StackOverflow here的相关讨论。

编辑:如果这是用于URL安全相关的Base64编码,只需执行Base64并将“+”替换为“ - ”,将“/”替换为“_”。但我猜,你可能不会那样想。

答案 2 :(得分:2)

如果可能,你可以用一些预定义的字符串替换+或斜杠。

答案 3 :(得分:2)

base-64的常见变体(用于查询字符串)是使用' - '和'_'代替'+'和'/'。也许在每一端Replace(...)都可以完成这项工作?

答案 4 :(得分:0)

您可以使用BitConverter.ToString(),它将为您提供十六进制字符串。但是,生成的字符串将比Base64编码更长。

答案 5 :(得分:0)

我正在搜索类似编码器,我使用了https://github.com/renmengye/base62-csharp/

它是“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”字符空间范围内的编码器/解码器。

我只是用

包装了它的方法

System.Text.Encoding.UTF8.GetBytes(plainText);System.Text.Encoding.UTF8.GetString(decoded);

调用以允许它轻松使用字符串。