2017-08-14 9 views

答えて

2

MIME::Base64::decode_base64で「デコードに失敗しました」がありません。それは、適合しないもの、すなわち、有効なbase64文字、最後に不完全なパディング、または終わりのマーカー '='に続くデータを無視するだけです。したがって、常に何かが返され、最悪の場合、これは空の文字列になります。

この動作は間違っていないことに注意してください。さまざまなBase64標準の少なくともいくつかは、無効な文字をスキップすることを明示的に要求し、不完全なパディングまたは '='の後のデータの場合はエラー処理を定義しません。それでも、MIME :: Base64の出力は、無効なデータの場合、他の実装と比べて異なる場合があります。

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にはデフォルトで空白が含まれています)

=はしばしば除外されていますので、不足することを許可することがあります=

データの破損が心配な場合は、データのハッシュをデータに含めます。

関連する問題