C# 方法,如 Base64String,但仅限字母数字(无加号或斜杠)
-
06-09-2019 - |
题
是否有任何 C# 方法的工作原理与 Convert.ToBase64String 类似,但除了字母数字输出外不生成任何内容?
谢谢!
解决方案
你可能会考虑使用类似Base32编码即可。有一个Base32编码器/解码器,用于C#此处一>迈克尔Giagnocavo。它采用的大写字母和数字的组合。
还有StackOverflow上的相关讨论,这里。
编辑:如果任何机会,这是对网址安全相关的Base64编码,只是做Base64和“+”替换为“ - ”和“/”与“_”。但我猜,你可能不希望它为。
其他提示
现在的答案有点过时了。为了未来搜索者的利益:现在在 C# 中处理这个问题的最佳方法是:
byte[] b; // fill your byte array somehow
string s = System.Web.HttpServerUtility.UrlTokenEncode(b);
这将返回一个 URL 安全的 Base64 编码字符串(这就是您在问题评论中所说的真正想要的)。
然后你可以使用你猜到的再次解码它:
byte[] b = System.Web.HttpServerUtility.UrlTokenDecode(s);
可以替换+或与一些预定义的字符串如果可能削减。
基-64(用于在查询字符串使用)的常见变体是使用“ - ”和“_”代替“+”和“/”。也许在每一端有点Replace(...)
会做的工作?
您可以使用BitConverter.ToString(),它会给你一个十六进制字符串。然而所得到的字符串将比Base64编码长。
我正在寻找一个这样像编码器和我用 https://github.com/renmengye/ base62-CSHARP /
这是在 “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz” 字符空间范围内的编码器/解码器。
我刚刚结束其方法与
System.Text.Encoding.UTF8.GetBytes(plainText);
和
System.Text.Encoding.UTF8.GetString(decoded);
调用允许它与串容易工作。