如何检测字符串是否为Base64Encoded?

MX4*_*399 6 delphi encoding character-encoding

哪个是检测字符串是否为Base64Encoded的最佳方法(使用Delphi)?

Dav*_*nan 5

你能做的最好就是尝试解码它.如果解码失败,则输入不是base64编码的.字符串成功解码,然后输入可能是base64编码.

  • 这将取决于如何实现用于解码的组件或函数,例如,如果使用Indy的`TIdDecoderMIME`组件来解码无效的Base64字符串,则组件不会引发任何异常或错误. (3认同)
  • @RRUZ好点.最重要的一点是,只是因为字符串可以被解码,并不意味着它最初被编码. (3认同)

RRU*_*RUZ 5

您可以检查字符串是否仅包含Base64 valids字符

function StringIsBase64(const InputString : String ) : Boolean;
const
  Base64Chars: Set of AnsiChar = ['A'..'Z','a'..'z','0'..'9','+','/','='];
var
  i : integer;
begin
  Result:=True;
   for i:=1 to Length(InputString) do
   {$IFDEF UNICODE}
   if not CharInSet(InputString[i],Base64Chars) then
   {$ELSE}
   if not (InputString[i] in Base64Chars) then
   {$ENDIF}
   begin
     Result:=False;
     break;
   end;
end;
Run Code Online (Sandbox Code Playgroud)

=字符用于填充,所以你可以添加一个aditional的valiation用于填充的base64字符串检查的功能,如果该字符串的长度为4 MOD

  • +1,虽然证明反向可能是一个更好的概念 - 即如果字符串包含有效范围之外的字符,那么它不是Base64,否则它可能或可能不是,如其他答案中所讨论的. (2认同)