我必须使用Perl解码一些base64字符串,我想知道docode是否成功。
我怎么知道解码没问题?如果我的解码失败会发生什么?
答案 0 :(得分:2)
没有"解码失败"与MIME::Base64::decode_base64
。它将简单地忽略任何不适合的东西,即不是有效base64字符的字符,末尾不完整的填充或结束标记后的任何数据' ='。因此,它总会返回一些东西,在最坏的情况下,这将是一个空字符串。
请注意,这种行为甚至都没有错。至少有一些不同的Base64标准明确要求跳过无效字符,并且没有定义错误处理,如果填充不完整或数据在' ='之后。但是,与无效数据的情况下的其他实现相比,MIME :: Base64的输出可能会有所不同。
答案 1 :(得分:2)
使用MIME :: Base64的decode_base64
时,解码始终被视为成功。不允许使用的字符会被忽略。
您可以使用以下方法严格验证您是否拥有有效的base64:
my $c1 = '[A-Za-z0-9+/]';
my $c2 = '[AQgw]';
my $c3 = '[AEIMQUYcgkosw048]';
die "Invalid data\n"
if $s !~ m{^(?:$c1{4})*+(?>$c1(?>$c2==|$c1$c3=)|)\z};
空格通常在中间使用,因此您可能希望允许空格。 (实际上,encode_base64
默认在输出中包含空格!)
=
经常被遗漏,因此您可能希望遗漏=
。
如果您担心数据损坏,请在数据中包含数据哈希值。