如何 URL 在 Perl 中编码的 Go 中安全解码 Base64?
How to URL Safe decode Base64 in Go, encoded in Perl?
我有一个 URL 安全编码字符串(由 Perl 生成),我需要在 Go 中对其进行解码。
这里有两个程序,在 Perl 和 Go 中 - Perl 工作正常,但 Go 出现错误。
我无法理解。
请帮忙!
=== Perl 代码 - 工作正常
#!/usr/bin/env perl
use common::sense;
use MIME::Base64::URLSafe;
my $str = 'Oi6cQzmolrUhkgHsNehtj9p_OsasB_6CIeygK0owoxTsXCtVWyQi-7DXxIJiaV-kSc6PGNC6uNz5V0A9QOGCaeCy6PolQY2Lt_v4JM42VEbsuML8guHfMO0ydvbXVcCR-yLfkz5CO0f-P1hVqxJBD8qPvk1t1DRzqmHP41DSfIm_WzlhtITnd_Wjt6E3CFS78HL3XjJlM-QBW9Z_GZgic8y7TlOWFzCRUf2Q-EZschrDi9l81E93XBNKe8knInL_uFN_oK_ob7fjnkGJO54RNn3coVsrzuIoNa6AI6oWLfsaJ5NyQYor5P0';
say urlsafe_b64decode($str);
=== Go 代码 - 出现错误
package main
import (
b64 "encoding/base64"
"fmt"
)
func main() {
str := "Oi6cQzmolrUhkgHsNehtj9p_OsasB_6CIeygK0owoxTsXCtVWyQi-7DXxIJiaV-kSc6PGNC6uNz5V0A9QOGCaeCy6PolQY2Lt_v4JM42VEbsuML8guHfMO0ydvbXVcCR-yLfkz5CO0f-P1hVqxJBD8qPvk1t1DRzqmHP41DSfIm_WzlhtITnd_Wjt6E3CFS78HL3XjJlM-QBW9Z_GZgic8y7TlOWFzCRUf2Q-EZschrDi9l81E93XBNKe8knInL_uFN_oK_ob7fjnkGJO54RNn3coVsrzuIoNa6AI6oWLfsaJ5NyQYor5P0"
fmt.Println("source B64:", str)
_, err := b64.URLEncoding.DecodeString(str)
if err != nil {
fmt.Println("error b64:", err)
}
}
===结束
作为解码returns的截断结果,无法在下一步中使用。
没有填充时使用RawURLEncoding:
_, err := b64.RawURLEncoding.DecodeString(str)
我有一个 URL 安全编码字符串(由 Perl 生成),我需要在 Go 中对其进行解码。 这里有两个程序,在 Perl 和 Go 中 - Perl 工作正常,但 Go 出现错误。 我无法理解。 请帮忙!
=== Perl 代码 - 工作正常
#!/usr/bin/env perl
use common::sense;
use MIME::Base64::URLSafe;
my $str = 'Oi6cQzmolrUhkgHsNehtj9p_OsasB_6CIeygK0owoxTsXCtVWyQi-7DXxIJiaV-kSc6PGNC6uNz5V0A9QOGCaeCy6PolQY2Lt_v4JM42VEbsuML8guHfMO0ydvbXVcCR-yLfkz5CO0f-P1hVqxJBD8qPvk1t1DRzqmHP41DSfIm_WzlhtITnd_Wjt6E3CFS78HL3XjJlM-QBW9Z_GZgic8y7TlOWFzCRUf2Q-EZschrDi9l81E93XBNKe8knInL_uFN_oK_ob7fjnkGJO54RNn3coVsrzuIoNa6AI6oWLfsaJ5NyQYor5P0';
say urlsafe_b64decode($str);
=== Go 代码 - 出现错误
package main
import (
b64 "encoding/base64"
"fmt"
)
func main() {
str := "Oi6cQzmolrUhkgHsNehtj9p_OsasB_6CIeygK0owoxTsXCtVWyQi-7DXxIJiaV-kSc6PGNC6uNz5V0A9QOGCaeCy6PolQY2Lt_v4JM42VEbsuML8guHfMO0ydvbXVcCR-yLfkz5CO0f-P1hVqxJBD8qPvk1t1DRzqmHP41DSfIm_WzlhtITnd_Wjt6E3CFS78HL3XjJlM-QBW9Z_GZgic8y7TlOWFzCRUf2Q-EZschrDi9l81E93XBNKe8knInL_uFN_oK_ob7fjnkGJO54RNn3coVsrzuIoNa6AI6oWLfsaJ5NyQYor5P0"
fmt.Println("source B64:", str)
_, err := b64.URLEncoding.DecodeString(str)
if err != nil {
fmt.Println("error b64:", err)
}
}
===结束
作为解码returns的截断结果,无法在下一步中使用。
没有填充时使用RawURLEncoding:
_, err := b64.RawURLEncoding.DecodeString(str)