2017-08-14 1 views

Antwort

2

Es gibt keine "Decodierung ist fehlgeschlagen" mit MIME::Base64::decode_base64. Es ignoriert einfach alles, was nicht passt, d. H. Zeichen, die keine gültigen base64-Zeichen sind, unvollständiges Auffüllen am Ende oder irgendwelche Daten, die auf die Endmarkierung '=' folgen. Somit wird immer etwas zurückgegeben und im schlimmsten Fall wird es eine leere Zeichenfolge sein.

Beachten Sie, dass dieses Verhalten nicht einmal falsch ist. Zumindest einige der verschiedenen Base64-Standards verlangen explizit, dass ungültige Zeichen übersprungen werden, und keines definiert die Fehlerbehandlung im Falle eines unvollständigen Auffüllens oder Daten nach '='. Dennoch kann die Ausgabe von MIME :: Base64 im Fall von ungültigen Daten anders sein als bei anderen Implementierungen.

2

Wenn Sie MIME :: Base64 decode_base64 verwenden, wird die Decodierung immer als erfolgreich erachtet. Nicht erlaubte Zeichen werden ignoriert.

Sie könnten genau überprüfen, ob Sie eine gültige base64 verwenden, haben die folgenden:

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}; 

Whitespace wird oft in der Mitte eingesetzt, so dass Sie Leerzeichen ermöglichen möchten. (In der Tat, encode_base64 enthält Whitespace in seiner Ausgabe standardmäßig!)

Die = sind oft weggelassen, so dass Sie möglicherweise möchten, dass = fehlt.

Wenn Sie Bedenken wegen Datenbeschädigung haben, schließen Sie einen Hash der Daten mit den Daten ein.

Verwandte Themen