Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leandro Peres

Verificar se na string existe uma codificação base64

Recommended Posts

Olá,

 

Bom, queria saber se tem como em uma string, verificar se ela é base64.

Em posse disso, estarei usando base64_decode para decodificação.

Pensei em fazer um if nessa string e se os dois ultimos digitos contiverem "==" então ela é base64, mais é um jeito não tão confiável, pois existem lugares em que o == não aparece em um base64.

 

Grato,

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, isso é praticamente impossível .. o máximo que você pode fazer é:

<?php
        $string = '#de';
 if( preg_match( '|^[a-zA-Z0-9/+]*={0,2}$|' , $string ) ){
	 echo 'Sim';
 } else {
	 echo 'Não';
 }

Saída:

Não

 

Porque contém caracteres que não são válidos, a expressão é justamente para isso, verificar se a string está no padrão de caracteres válidos para base64.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que louco

 

<?php

var_dump( base64_encode( '#de' ) ); // string 'I2Rl' (length=4)

var_dump( base64_decode( 'I2Rl#', true ) ); // boolean false

var_dump( base64_decode( 'I2Rl====', true ) ); // string '#de' (length=3)

var_dump( base64_decode( 'I2Rl', true ) ); // string '#de' (length=3)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples.

 

Você condiciona o retorno de base64_decode() à FALSE. Se não o for, você faz algo:

 

$decoded = base64_decode( $input );

if( $decoded !== FALSE ) {

   // Do something
}

Felizmente a função de decodificação não dispara nenhum erro permitindo usar o retorno negativo como argumento condicional.

Compartilhar este post


Link para o post
Compartilhar em outros sites

    function decodificar_base64($input) {

       $hospedeiro = base64_decode($input);

       if ($hospedeiro !== FALSE) {
           echo base64_decode($input);
       } else {
           echo "Não é base64!";
       }
   }

 

Bruno Agusto,

Coloquei dessa forma e não obtive sucesso, pode me dizer se fiz algo de errado ? Ele só cai no !== e se digito algo que não seja base64 ele não cai no else.

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

algo assim, Leandro:

 

function decodificar_base64($input)
{

   if ( $input = base64_decode($input) ) {
       return $input;
   }
   return false;
}

 

 

claro que não é 100% funcional, mas é o que chega "mais próximo"..

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se você tiver certeza daquilo que pode ser considerado como TRUE, pode adicionalmente fazer uma ER simples buscando por caracteres alfa-numéricos na string decodificada:

 

if( preg_match( '/\w+/', $decoded ) == 0 ) {

   // Valido por base64_decode(), mas inválido segundo parâmetro de quem criou
}

Pelo menos, restringiria ainda mais, dimunuindo alguns falsos positivos.

 

Esse tipo de verificação adicional também pode ser aplicado para, por exemplo, se a string codificada esperada for um array serializado, ao invés do preg_match() poderia optar por unserialize(), verificando um possível FALSE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.