これについては、さまざまな形ですでに数十の質問があることを私は知っています。私の質問はもう少し直接的です。
Free Pascal と s:=DecodeStringBase64(s); の使用 s として渡されるデコードされた文字列が、デコードされたガベージを回避するために、最初に適切な Base64 入力データから実際にデコードされているかどうかを検証する方法はありますか?
私が行った最善の方法は、正規表現を使用して潜在的なBase64データを特定することです(ここで受け入れられた回答から)。次に、mod を使用して 4 で割り切れるかどうかを確認します。4 で割り切れる場合は、DecodeStringBase64 に渡します。ただし、正規表現と一致しているにもかかわらず、まだ多くの誤検知が発生し、「デコード」されたデータが返されましたが、最初は明らかに Base64 ではありませんでした。たとえば、「WindowsXP=」は式に一致しますが、Base64 でエンコードされたデータではありません。
同様に、「Ted」という名前は VGVk としてエンコードされ、通常の「=」パディング (フッターとしてフラグを立てるのに役立ちます) さえありませんが、それでも見つけてデコードしたい潜在的な Base64 フラグメントです。
PHP には、検証を支援するために true パラメーターを渡すことができるbase64_decode()があります。
私の知る限り、Free Pascal には DecodeStringBase64 ではこれがなく、検証する方法が必要です。
読者がたまたま昨日のようにそれを探している場合は、デコードとエンコードの主題に関するその他の有用な返信がここにあります