在 Python 中解码 Base64,该代码是用 Perl 编码的



我有用Perl创建的base64编码数据,使用MIME::Base64encode_base64($data)

其结果是 :ahX/OxLY/BBR4Wy+n+a3Mg==

当我在Perl中解码时,我得到了j?;??Q?l???2.如果我把它写到一个文件中,它看起来像这样:jˇ;ÿ¸Q·læüÊ∑2

但是,当我尝试使用相同的base64编码数据并使用python解码时base64.b64decode(data), I get: b'j\x15\xff;\x12\xd8\xfc\x10Q\xe1l\xbe\x9f\xe6\xb72''

如果我将其解码为latin1,结果更接近:'jx15ÿ;x12Øüx10Qál¾x9fæ·2',但我需要完全相同的数据。

如何从 python 获得完全相同的输出?我错过了什么?

(Perl$data本身据说是用随机read(DEV,$data,16);生成的。

在Perl和Python中,你已经有相同的字符串。

$ perl -e'
use MIME::Base64 qw( encode_base64 );
my $raw = "x6Ax15xFFx3Bx12xD8xFCx10x51xE1x6CxBEx9FxE6xB7x32";
CORE::say encode_base64($raw, "");
'
ahX/OxLY/BBR4Wy+n+a3Mg==
$ python3 <<__END_OF_PROG__
import base64
encoded = "ahX/OxLY/BBR4Wy+n+a3Mg==";
expected = b"x6Ax15xFFx3Bx12xD8xFCx10x51xE1x6CxBEx9FxE6xB7x32";
raw = base64.b64decode(encoded)
print(raw == expected)
__END_OF_PROG__
True

那是因为base64.b64decode(data)没有生产

b'jx15xff;x12xd8xfcx10Qxe1lxbex9fxe6xb72'

它生成的是由该 Python 字符串文本生成的字符串,该字符串由以下 16 个字节(十六进制(组成:

6A 15 FF 3B 12 D8 FC 10 51 E1 6C BE 9F E6 B7 32

这就是你在Perl中用来产生ahX/OxLY/BBR4Wy+n+a3Mg==的字符串。

最新更新