Convert.FromBase64String() throws “invalid Base-64 string” error

筅森魡賤 提交于 2020-01-05 06:28:31

问题


I have a key which is Base64 encoded.

While trying to decode I am receiving the following error. The error is thrown by byte[] todecode_byte = Convert.FromBase64String(data);

Error in base64DecodeThe input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

I am using the below method to decode this:

public string base64Decode(string data)
{
    try
    {
        System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
        System.Text.Decoder utf8Decode = encoder.GetDecoder();

        byte[] todecode_byte = Convert.FromBase64String(data); // this line throws the exception

        int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
        char[] decoded_char = new char[charCount];
        utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
        string result = new String(decoded_char);
        return result;
    }
    catch (Exception e)
    {
        throw new Exception("Error in base64Decode" + e.Message);
    }
}

回答1:


So there are two issues:

  1. Your string is not a multiple of 4 long. It needs to be padded to a multiple of 4 using '=' characters.
  2. It looks like it's the format of base 64 used for URLs and suchlike, "modified Base64 for URL". This uses - instead of + and _ instead of /.

So to fix this, you need to swap - to + and _ to / and pad it, like so:

public static byte[] DecodeUrlBase64(string s)
{
    s = s.Replace('-', '+').Replace('_', '/').PadRight(4*((s.Length+3)/4), '=');
    return Convert.FromBase64String(s);
}



回答2:


Your base64-String is not valid. It contains a - which is not allowed.

static void Main()
{
    string tmp = "eL78WIArGQ7bC44Ozr0yvUBkz9oc5YlsENYJilInSP==";
    byte[] tmp2 = Convert.FromBase64String(tmp);
}

-> Removed Minus -> Added two filler-chars "="



来源:https://stackoverflow.com/questions/50524665/convert-frombase64string-throws-invalid-base-64-string-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!