繁体   English   中英

用 Perl 编码的 Python 解码 Base64

[英]Decode Base64 in Python that was encoded in 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:解码时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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM