【发布时间】:2018-08-30 10:36:24
【问题描述】:
我有一个 base64 编码的字符串,我正试图用 go 解密。该字符串包含应忽略的空格。 我正在尝试的示例代码:
s := "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjEzZmU3MWQ0LWQxMGQtNDIyMC1hMjE2LTIwMDZkMWRkNGNiOCIsImFjc1RyY++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++W5zSUQiOiJkN2M0NWY5OS05NDc4LTQ0YTYtYjFmMi0xMDAwMDAwMDMzNjYiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0%3D"
out, err := base64.URLEncoding.DecodeString(s)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(out))
此代码返回:
输入字节 93 处的非法 base64 数据
更改字符串填充后,使用 StdEncoding 代替 URLEncoding:
s= strings.Replace(s, "%3D", "=", -1)
out, err := base64.StdEncoding.DecodeString(s)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(out))
输出将是:
{"threeDSServerTransID":"13fe71d4-d10d-4220-a216-2006d1dd4cb8","acsTrc���������������������������� ������������������������������������������������nsID”: "d7c45f99-9478-44a6-b1f2-100000003366","messageType":"CReq","messageVersion":"2.1.0","challengeWindowSize":"02"}
如何正确解密字符串?
【问题讨论】:
-
“我有一个 base64 编码的字符串”。不,你没有。如果你有一个,你可以毫无错误地解码它。你有别的东西。找出你实际拥有什么。
-
这是一个base64编码的字符串。尝试使用此站点将正确解码字符串:base64decode.org
-
我猜想字符串 supposed 使用tools.ietf.org/html/rfc4648 中描述的“URL 和文件名安全”编码,加号是某种无关信号. base64 的其他变体允许在编码中使用 +,或者将它们视为分隔符。
标签: string go base64 url-encoding