gpt4 book ai didi

string - 用空格解码base64

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:56 28 4
gpt4 key购买 nike

我有一个 base64 编码的字符串,我正试图用 go 解密。该字符串包含应忽略的空格。我正在尝试的示例代码:

s := "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjEzZmU3MWQ0LWQxMGQtNDIyMC1hMjE2LTIwMDZkMWRkNGNiOCIsImFjc1RyY++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++W5zSUQiOiJkN2M0NWY5OS05NDc4LTQ0YTYtYjFmMi0xMDAwMDAwMDMzNjYiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0%3D"

out, err := base64.URLEncoding.DecodeString(s)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(out))

此代码返回:

illegal base64 data at input byte 93


更改字符串填充并使用 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"}


如何正确解密字符串?

最佳答案

您所拥有的很可能是从 URL 中“截断”出来的,并且是 URL 编码形式。所以要得到一个 Base64 字符串,你必须先解码它,你可以使用 url.PathUnescape()为此。

获得未转义的字符串后,您可以使用 base64.StdEncoding 编码器对其进行解码。请注意,仅仅因为它是/是 URL 的一部分,并不能使它成为使用 Base64 的 URL 安全版本的字母表的 base64 字符串。

此外,它中间的 + 符号实际上只是“垃圾”。它们一开始就不应该存在,因此请仔细检查您是如何获得输入的,但既然它们存在,您就必须删除它们。为此,您可以使用 strings.Replace() .

解码无效输入的最终代码:

s := "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjEzZmU3MWQ0LWQxMGQtNDIyMC1hMjE2LTIwMDZkMWRkNGNiOCIsImFjc1RyY++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++W5zSUQiOiJkN2M0NWY5OS05NDc4LTQ0YTYtYjFmMi0xMDAwMDAwMDMzNjYiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0%3D"
s = strings.Replace(s, "+", "", -1)
var err error
if s, err = url.PathUnescape(s); err != nil {
panic(err)
}

out, err := base64.StdEncoding.DecodeString(s)
if err != nil {
panic(err)
}
fmt.Println(string(out))

完整输出(在 Go Playground 上尝试):

{"threeDSServerTransID":"13fe71d4-d10d-4220-a216-2006d1dd4cb8",
"acsTransID":"d7c45f99-9478-44a6-b1f2-100000003366","messageType":"CReq",
"messageVersion":"2.1.0","challengeWindowSize":"02"}

请注意,+ 符号是标准 Base64 字母表中的有效符号,您甚至可以在不删除 + 符号的情况下解码 Base64,但随后您获取结果中 JSON 键中剩余的垃圾数据。

关于string - 用空格解码base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094925/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com