输入的不是有效的Base-64字符串

时间:2019-10-10 12:23:24

标签: c# base64

FromBase64String方法面临的问题。

输入不是有效的Base-64字符串,因为它包含非base 64字符,两个以上的填充字符或填充字符中的非法字符。

尝试将-替换为+

var bytes = Convert.FromBase64String(id);
id = "59216167-f9c0-4b1b-b1db-1babd1209f10@ABC"

预期结果是字符串应转换为等效的8位无符号整数数组。

3 个答案:

答案 0 :(得分:2)

这不是Base64编码的字符串。这是一个向导。您可以像这样将其读入字节数组

var bytearray = new Guid("59216167-f9c0-4b1b-b1db-1babd1209f10").ToByteArray();

答案 1 :(得分:1)

  

输入的不是有效的Base-64字符串

出现这种错误的确切原因是因为这不是有效的Base64字符串,而是已经提到的,它是Guid;和当时不是有效的Guid

首先,您可以尝试进行转换,以检查您是否还有有效的Base64字符串。

public static bool StringIsBase64(string myString)
{
   Span<byte> buffer = new Span<byte>(new byte[myString.Length]);
   return Convert.TryFromBase64String(myString, buffer , out int bytesParsed);
}

现在,如果调用此函数并成功执行,那么我们将假定您确实具有有效的Base64字符串,否则将发生转换错误。

您的呼叫现在看起来像这样:

 string id = "59216167-f9c0-4b1b-b1db-1babd1209f10@ABC";
 var bytes;
 if (StringIsBase64(id))
 {
    bytes = Convert.FromBase64String(id);
 } 

我想解决的其他问题是,输入甚至对于Guid都无效GUID是128位整数(16个字节),并且该字符串无效。

您实际上会收到错误:

  

向导应包含32位数字和4个破折号(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

字符串末尾的字符@ABC引起了这种情况,如果删除了这些字符,那么我们就有一个实际有效的Guid

答案 2 :(得分:-1)

尝试一下会有所帮助

    using System;
    public class Program{

    public static void Main()
    {
        Guid gg = Guid.NewGuid();
        Console.WriteLine(gg);
        string ss = Encode(gg);
        Console.WriteLine(ss);
        Console.WriteLine(Decode(ss));
    }
    public static string Encode(Guid guid)
    {
        string encoded = Convert.ToBase64String(guid.ToByteArray());
        encoded = encoded.Replace("/", "_").Replace("+", "-");
        return encoded.Substring(0, 22);
    }

    public static Guid Decode(string value)
    {
        value = value.Replace("_", "/").Replace("-", "+");
        byte[] buffer = Convert.FromBase64String(value + "==");
        return new Guid(buffer);
    }




}