Como usar a codificação Base64 em PHP
Neste artigo rápido, discutiremos os fundamentos da codificação base64 no contexto do PHP. Basicamente, veremos como você pode usar funções PHP para transformar dados no formato codificado em base64.
O que é codificação Base64?
Base64 é uma codificação de dados binários em ASCII. Cada caractere da string representa seis bits de informação. Efetivamente, ele representa os dados binários na representação da base 64. Verifique esta cartilha sobre sistemas numéricos e bases se precisar de uma atualização.
O principal uso da codificação Base64 é codificar dados binários em texto ASCII, quando você deseja transferir esses dados por meio de protocolos que são projetados especificamente para lidar com dados textuais. Isso garante que os dados permaneçam intactos enquanto são transportados. Especificamente, Base64 é usado para coisas como enviar e-mails e carregar dados binários em formulários HTML.
Outro uso comum da codificação Base64 é o hash. Obviamente, você não deve usar a própria codificação Base64 para gerar hashes, pois ela pode ser facilmente decodificada. Em primeiro lugar, você gera um hash com a ajuda de um algoritmo de hash como SHA e, em seguida, converte o hash resultante no formato codificado em Base64 para exibi-lo. É realmente fácil comparar duas somas de verificação codificadas em Base64 para integridade.
Na próxima seção, discutiremos as funções integradas de Base64 no PHP.
Funções Base64 em PHP
Existem duas funções principais no PHP que lidam com a codificação Base64. A base64_encode
função permite codificar dados no formato MIME Base64. Por outro lado, a base64_decode
função é usada para decodificar os dados codificados em MIME Base64.
Vamos examinar cada uma dessas funções em detalhes.
base64_encode
Vamos examinar a sintaxe da base64_encode
função.
base64_encode (string $ string): string
O único argumento que você precisa passar para a base64_encode
função é a string de origem que você deseja codificar para MIME Base64.
Isso retorna uma string codificada em Base64. É importante observar que os dados codificados em Base64 ocupam cerca de 33% a mais de espaço na memória do que os dados originais.
base64_decode
Vamos examinar a sintaxe da base64_decode
função.
base64_decode (string $ string, bool $ strict = false): string | false
O primeiro argumento são os dados codificados em Base64 que você deseja decodificar.
O segundo argumento é opcional, mas se você passar TRUE
, ele executará uma verificação estrita. Isso significa que se os dados codificados em Base64 contiverem caracteres de fora do alfabeto em Base64, a função de decodificação retornará FALSE
. Isso é útil para verificar a integridade da string codificada em Base64. Por outro lado, se quiser descartar caracteres inválidos silenciosamente, basta passar FALSE
, que é o valor padrão.
Na decodificação bem-sucedida, a função retorna a string decodificada, caso contrário, ela retorna FALSE
. É importante observar que a base64_decode
função pode retornar dados binários se a string em questão estava no formato binário antes da codificação.
Como codificar e decodificar dados com MIME Base64
Nesta seção, veremos alguns exemplos para ver as funções Base64 em ação.
Codificar parâmetros de URL
Na maioria das vezes, você acabará usando a base64_encode
função para codificar parâmetros que contêm URLs.
Vamos ver rapidamente como isso funciona com o exemplo a seguir.
<?php $redirectUrl = 'https://www.example.com/some/other/url'; header('Location: https://www.example.com/redirect/' . base64_encode($redirectUrl)); //https://www.example.com/redirect/aHR0cDovL3d3dy5leGFtcGxlLmNvbS9zb21lL290aGVyL3VybA== ?>
Como você pode ver, se não usarmos a base64_encode
função, o URL resultante será semelhante a https://www.example.com/redirect/http://www.example.com/some/other/url
, que é inválido.
Soma de verificação codificada em Base64
Como discutimos anteriormente, a base64_encode
função é útil ao converter dados binários em uma string ASCII.
Vamos dar uma olhada no exemplo a seguir.
<?php $base64_encoded_hash = base64_encode(hash_hmac('sha1', 'Source string to be hashed.', 'YOUR_TOP_SECRET_KEY', true)); ?>
No exemplo acima, a hash_hmac
função retornaria dados binários com hash. Portanto, se você não usar a base64_encode
função, será difícil exibir os dados binários resultantes.
Anexos de Email
Em PHP, ao enviar um e-mail com anexos de arquivo, você pode codificar o conteúdo do arquivo no formato codificado em Base64. Na verdade, se você estiver enviando anexos binários, é essencial codificar os dados do anexo em vez de enviá-los no formato bruto.
Vamos dar uma olhada no exemplo a seguir.
<?php $to = '[email protected]'; $subject = 'Example of base64 encoded attachments'; $message = 'This email contains an image attachment.'; $boundary = md5(microtime()); $headers = "From: name <[email protected]>" . "\r\n"; $headers .= "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=" . $boundary . "\r\n"; $headers .= "Multipart MIME example." . "\r\n"; $message.= "--" . $boundary. "\r\n"; $message.= "Content-Type: text/plain; charset=\"iso-8859-1\"" . "\r\n"; $message.= "Content-Transfer-Encoding: 8bit" . "\r\n"; $message.= $message . "\r\n"; // attach file $filename = 'nature.jpg'; $filecontents = file_get_contents($filename); $filecontents = chunk_split(base64_encode($filecontents)); $message.= "--" . $boundary. "\r\n"; $message.= "Content-Type: image/jpg; name=\"" . $filename . "\"" . "\r\n"; $message.= "Content-Transfer-Encoding: base64" . "\r\n"; $message.= "Content-Disposition: attachment" . "\r\n"; $message.= $filecontents . "\r\n"; $message.= "--" . $boundary. "--"; mail($mailto, $subject, $body, $headers); ?>
Como você pode ver, usamos a base64_encode
função para codificar os dados binários da imagem antes de serem enviados como um anexo.
Desta forma, você pode usar funções Base64 em PHP para vários fins.
Conclusão
Neste artigo rápido, discutimos como você pode usar funções Base64 no desenvolvimento diário de PHP.