解码谷歌 Base64
Decode Googles Base64
我试图从 Google 的 Gmail API、
中解码 Base64 字符串
字符串是:
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ-DQo8bWV0YSBodHRwLWVxdWl2PSJ-
我用过:
Convert.FromBase64String(Base64String);
但我也试过谷歌“Google.Protobuf”包:
ByteString.FromBase64(Base64String);
两者都抛出错误
FormatException: The 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.
在线解码https://www.base64decode.org/没有问题解码
该字符串来自 Google 的 Gmail Api (message.Payload.Body.Data
)
here 是一个快速在线项目
您的输入看起来像 RFC 4648 §5 base-64,即没有填充,用 -
代替 +
和 _
代替 /
。 Convert.FromBase64String
想要 RFC 4648 §4 base-64 with 填充。这有效,例如:
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 => "=",
_ => "",
};
我试图从 Google 的 Gmail API、
中解码 Base64 字符串
字符串是:
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ-DQo8bWV0YSBodHRwLWVxdWl2PSJ-
我用过:
Convert.FromBase64String(Base64String);
但我也试过谷歌“Google.Protobuf”包:
ByteString.FromBase64(Base64String);
两者都抛出错误
FormatException: The 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.
在线解码https://www.base64decode.org/没有问题解码
该字符串来自 Google 的 Gmail Api (message.Payload.Body.Data
)
here 是一个快速在线项目
您的输入看起来像 RFC 4648 §5 base-64,即没有填充,用 -
代替 +
和 _
代替 /
。 Convert.FromBase64String
想要 RFC 4648 §4 base-64 with 填充。这有效,例如:
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 => "=",
_ => "",
};