Как уже говорилось, нет достоверной проверки, является ли определенная строка кодированной Base64 или нет, поэтому даже если вы рассматриваете ввод как допустимую кодированную строку Base64, это не означает, что строка фактически закодирована таким образом.,Я публикую здесь еще одну версию функции проверки, которая согласно RFC 4648
проверяет:
- , если входная строка не пуста и ее длина кратна 4
- , если входная строка содержит не более двух символов заполнения и только в конце строки
- , если входная строка содержит только символы из алфавита Base64 (см.
Page 5, Table 1
)
function IsValidBase64EncodedString(const AValue: string): Boolean;
const
Base64Alphabet = ['A'..'Z', 'a'..'z', '0'..'9', '+', '/'];
var
I: Integer;
ValLen: Integer;
begin
ValLen := Length(AValue);
Result := (ValLen > 0) and (ValLen mod 4 = 0);
if Result then
begin
while (AValue[ValLen] = '=') and (ValLen > Length(AValue) - 2) do
Dec(ValLen);
for I := ValLen downto 1 do
if not (AValue[I] in Base64Alphabet) then
begin
Result := False;
Break;
end;
end;
end;