2017-08-14 174 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默認在其輸出中包含空格!)

=經常被忽略,因此您可能希望允許缺少=

如果您擔心數據損壞,請在數據中包含數據散列。