一尘不染

如何在C#中实现Base64 URL安全编码?

c#

我想在C#中实现Base64
URL安全编码。在Java中,我们有一个公共Codec库,该库为我提供了一个URL安全编码的字符串。如何使用C#实现相同目的?

byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode");
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);

上面的代码将其转换为Base64,但填充了==。有没有办法实现URL安全编码?


阅读 1374

收藏
2020-05-19

共1个答案

一尘不染

通常, 只需交换字母 以用于url中,这样就不必进行%编码;只有65个字符的3是有问题-
+/=。最常见的替换是-到位的+,并_代替/。至于填充: 只需将其删除=)即可;您可以 推断
出所需的填充量。在另一端:只需逆转该过程即可:

string returnValue = System.Convert.ToBase64String(toEncodeAsBytes)
        .TrimEnd(padding).Replace('+', '-').Replace('/', '_');

与:

static readonly char[] padding = { '=' };

并反转:

string incoming = returnValue
    .Replace('_', '/').Replace('-', '+');
switch(returnValue.Length % 4) {
    case 2: incoming += "=="; break;
    case 3: incoming += "="; break;
}
byte[] bytes = Convert.FromBase64String(incoming);
string originalText = Encoding.ASCII.GetString(bytes);

但是,有趣的问题是: 这是否与“通用编解码器库”使用的方法相同? 测试当然是一件很合理的事情-这是一种非常普遍的方法。

2020-05-19