解码Google Base64

0盐水

我试图从Googles Gmail API解码Base64字符串,
该字符串是:PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ-DQo8bWV0YSBodHRwLWVxdWl2PSJ-

我用了:
Convert.FromBase64String(Base64String);

但我也尝试过Google的“ Google.Protobuf”软件包:
ByteString.FromBase64(Base64String);

都抛出错误

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

在线解码器https://www.base64decode.org/没问题解码
字符串来自Google的Gmail Api(message.Payload.Body.Data
是一个快速的在线项目

马克·格雷韦尔

您的输入看起来像RFC 4648§5base-64,即不使用填充,-而是使用代替+_代替/Convert.FromBase64String需要填充的RFC 4648§4base-64 例如,这有效:

string s = @"PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ-DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4NCjx0aXRsZT5WZXJpZmljYXRpb24gRW1haWw8L3RpdGxlPg0KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiLz4NCjxzdHlsZT4NCnRkIHtwYWRkaW5nLXJpZ2h0OjE1cHg7DQpwYWRkaW5nLWxlZnQ6MTVweDt9DQp0aCB7cGFkZGluZy1yaWdodDoxNXB4Ow0KcGFkZGluZy1sZWZ0OjE1cHg7fQ0KcCB7cGFkZGluZzogNXB4O30NCjwvc3R5bGU-DQo8L2hlYWQ-DQo8Ym9keSBzdHlsZT0ibWFyZ2luOiAwOyBwYWRkaW5nOiAwOyI-DQogPHA-RmFzdCBnZXNjaGFmZnQsPC9wPg0KIDxwPm51ciBub2NoIGVpbmVuIFNjaHJpdHQg4oCTIGRlciBLbGljayBhdWYgZGVuIGZvbGdlbmRlbiBMaW5rIGJlc3TDpHRpZ3QgZGVpbmUgenVtIE5ld3NsZXR0ZXIuIEhlcnpsaWNoZW4gRGFuayE8L3A-DQogPHA-QW5tZWxkdW5nIGJlc3TDpHRpZ2VuIDwvcD4NCiA8YSBocmVmPSJodHRwczovL3Rlc3QtYXBwLmJsdW1lMjAwMC5kZS9teS1tZW51L3Byb2ZpbGU_c3Vic2NyaWJlPVRydWUmc3Vic2NyaXB0aW9uSWQ9MTAiPiBodHRwczovL3Rlc3QtYXBwLmJsdW1lMjAwMC5kZS9teS1tZW51L3Byb2ZpbGU_c3Vic2NyaWJlPVRydWUmc3Vic2NyaXB0aW9uSWQ9MTA8L2E-DQo8YnI-DQo8cD5EZWluIEJMVU1FIDIwMDAtVGVhbTwvcD48L2JvZHk-DQo8L2h0bWw-";
s = s.Replace('-', '+').Replace('_', '/'); // change alphabet
byte[] b = Convert.FromBase64String(s);

如果其他输入抱怨填充差异,则需要手动添加填充,例如:

s = s.Replace('-', '+').Replace('_', '/') + (s.Length % 4) switch {
    2 => "==",
    3 => "=",
     _ => "",
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章