Android64和C#之间的Base64 url​​安全编码和解码

时间:2016-05-06 02:02:23

标签: c# android base64 decode encode

在我的Android应用程序中,我使用标记为java.util.Base64URL_SAFE的{​​{1}}编码和解码。

但是,当我尝试使用NO_WRAP在我的C#应用​​程序中解码它时,我回来了HttpServerUtility.UrlTokenEncode。在此状态下,我的编码字符串也无法在Android应用程序上解码。

我错过了什么? null标志是否确保Base64字符串没有URL_SAFE+以及任何额外的填充?为什么/不接受Base64值?

I was using this post as reference, for anyone who is interested.

1 个答案:

答案 0 :(得分:1)

UrlTokenEncode返回null因为我传递的是string而不是UrlToken

坚持使用Android中的编码/解码的URL_SAFENO_WRAP Base64标记,我设法将我的C#应用​​程序更改为以url_safe方式解码/编码。

    public string UrlEncode(string str)
    {
        if (str == null || str == "")
        {
            return null;
        }

        byte[] bytesToEncode = System.Text.UTF8Encoding.UTF8.GetBytes(str);
        String returnVal = System.Convert.ToBase64String(bytesToEncode);

        return returnVal.TrimEnd('=').Replace('+', '-').Replace('/', '_');
    }

    public string UrlDecode(string str)
    {
        if (str == null || str == "")
        {
            return null;
        }

        str.Replace('-', '+');
        str.Replace('_', '/');

        int paddings = str.Length % 4;
        if (paddings > 0)
        {
            str += new string('=', 4 - paddings);
        }

        byte[] encodedDataAsBytes = System.Convert.FromBase64String(str);
        string returnVal = System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes);
        return returnVal;
    }