解码Base64字符串时填充错误



我正在尝试解码Base64编码的字节字符串到有效的HTTP URL。我已经尝试追加必要的填充(=)。但它似乎仍然不起作用。

我试过下面的代码。

import base64
encoded = b"aHR0cHM6Ly9mb3Jtcy5nbGUvWU5ZXQ0d2NRWHVLNnNwdjU="
decoded = base64.b64decode(encoded)
print(decoded)

字符串encoded有一个缺失字符作为噪声的一部分。是否有一种方法来检测缺失的字符,然后执行解码操作?

所以你有这个aHR0cHM6Ly9mb3Jtcy5nbGUvWU5ZXQ0d2NRWHVLNnNwdjU=base64

对于缺失的字符,您有64abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/ (for base64)) and 48-a-H-R-0-c-H-M-6-L-y-9-m-b-3-J-t-c-y-5-n-b-G-U-v-W-U-5-Z-X-Q-0-d-2-N-R-W-H-V-L-N-n-N-w-d-j-U-=-中缺失字符的可能位置(-表示可能位置)

64 * 48 = 3072可能的编码字符串。您可以尝试手工生成它们,也可以编写一些代码来做同样的事情。

生成它们后,可以解码获取URL的字符串使用一些内置库&检查这个URL是否有效是与否。如果您还需要知道这个URL是否 或者不,你可以创建一个HTTP 到URL &检查响应 StatusCode .

代码:

package main
import (
    "encoding/base64"
    "fmt"
    "net/http"
)
func main() {
    encodedURL := "aHR0cHM6Ly9mb3Jtcy5nbGUvWU5ZXQ0d2NRWHVLNnNwdjU="
    options := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
    length := len(encodedURL)
    for i := 0; i <= length; i++ {
        for idx := 0; idx < 64; idx++ {
            tempEncoded := encodedURL[:i] + options[idx:idx+1] + encodedURL[i:]
            decodedURL, _ := base64.URLEncoding.DecodeString(tempEncoded)
            resp, err := http.Get(string(decodedURL))
            if err == nil && resp.StatusCode == http.StatusOK {
                fmt.Println("this URL is valid & exists: ", string(decodedURL))
            }
        }
    }
}

当未编码输入的长度不是3的倍数时,编码后的输出必须添加填充,使其长度为4的倍数。

len(encoded)47,应该是48,所以再添加一个=

encoded = b"aHR0cHM6Ly9mb3Jtcy5nbGUvWU5ZXQ0d2NRWHVLNnNwdjU=="
print(decoded)
b'https://forms.gle/YNY]rx1dxd8xd4Vx1dRxcdx9cxdcx1dx8d'

最新更新