[英]Decode Base64 in Python that was encoded in Perl
我有使用 Perl 创建的 base64 编码数据,使用MIME::Base64
和encode_base64($data)
。
结果是: ahX/OxLY/BBR4Wy+n+a3Mg==
当我在 Perl 中解码时,我得到j?;??Q?l???2
。 如果我把它写到一个文件中,它看起来像这样: jˇ;ÿ¸Q·læüÊ∑2
但是,当我尝试使用相同的 base64 编码数据并使用 python base64.b64decode(data), I get:
解码时base64.b64decode(data), I get:
b'j\\x15\\xff;\\x12\\xd8\\xfc\\x10Q\\xe1l\\xbe\\x9f\\xe6 \\xb72'`
如果我将其解码为latin1
,结果会更接近: 'j\\x15ÿ;\\x12Øü\\x10Qál¾\\x9fæ·2'
,但我需要完全相同的数据。
如何从python获得完全相同的输出? 我错过了什么?
(Perl $data
本身应该是用 urandom read(DEV,$data,16);
。
您已经在 Perl 和 Python 中拥有相同的字符串。
$ perl -e'
use MIME::Base64 qw( encode_base64 );
my $raw = "\x6A\x15\xFF\x3B\x12\xD8\xFC\x10\x51\xE1\x6C\xBE\x9F\xE6\xB7\x32";
CORE::say encode_base64($raw, "");
'
ahX/OxLY/BBR4Wy+n+a3Mg==
$ python3 <<__END_OF_PROG__
import base64
encoded = "ahX/OxLY/BBR4Wy+n+a3Mg==";
expected = b"\x6A\x15\xFF\x3B\x12\xD8\xFC\x10\x51\xE1\x6C\xBE\x9F\xE6\xB7\x32";
raw = base64.b64decode(encoded)
print(raw == expected)
__END_OF_PROG__
True
那是因为base64.b64decode(data)
没有产生
b'j\x15\xff;\x12\xd8\xfc\x10Q\xe1l\xbe\x9f\xe6\xb72'
它产生的是由 Python 字符串文字产生的字符串,该字符串由以下 16 个字节(十六进制)组成:
6A 15 FF 3B 12 D8 FC 10 51 E1 6C BE 9F E6 B7 32
这就是您在 Perl 中用来生成ahX/OxLY/BBR4Wy+n+a3Mg==
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.