私はPerlを使っていくつかのbase64文字列をデコードする必要があり、ドックコードが成功しているかどうかを知りたいのですが。Perl MIME :: Base64デコードに失敗するかどうかを調べる方法は?
デコードが正常であることをどのように知ることができますか?デコードが失敗したらどうなりますか?
私はPerlを使っていくつかのbase64文字列をデコードする必要があり、ドックコードが成功しているかどうかを知りたいのですが。Perl MIME :: Base64デコードに失敗するかどうかを調べる方法は?
デコードが正常であることをどのように知ることができますか?デコードが失敗したらどうなりますか?
MIME::Base64::decode_base64
で「デコードに失敗しました」がありません。それは、適合しないもの、すなわち、有効なbase64文字、最後に不完全なパディング、または終わりのマーカー '='に続くデータを無視するだけです。したがって、常に何かが返され、最悪の場合、これは空の文字列になります。
この動作は間違っていないことに注意してください。さまざまなBase64標準の少なくともいくつかは、無効な文字をスキップすることを明示的に要求し、不完全なパディングまたは '='の後のデータの場合はエラー処理を定義しません。それでも、MIME :: Base64の出力は、無効なデータの場合、他の実装と比べて異なる場合があります。
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
にはデフォルトで空白が含まれています)
=
はしばしば除外されていますので、不足することを許可することがあります=
。
データの破損が心配な場合は、データのハッシュをデータに含めます。