Criptografia é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário.
Base64 é um método para codificação de dados para transferência na Internet. É utilizado frequentemente para transmitir dados binários por meios de transmissão que lidam apenas com texto, como por exemplo para enviar arquivos anexos por email.
É constituído por 64 caracteres ([A-Za-z0-9], “/” e “+”) que deram origem ao seu nome. O carácter “=” é utilizado como um sufixo especial e a especificação original (RFC 989) definiu que o símbolo “*” pode ser utilizado para delimitar dados convertidos, mas não criptografados, dentro de um stream.
Exemplo de codificação:
- Texto original: hello world
- Texto convertido para Base64: aGVsbG8gd29ybGQK
O objetivo deste artigo é desenvolver um aplicativo simples que poderá ser utilizado para criptografar seus arquivos ou códigos fontes em PHP.
Veja na Figura 1 como será o desenvolvimento do nosso programa.

- Usuário faz upload do arquivo em PHP;
- O sistema faz a criptografia do código usando sistema de Base 64 nativo do PHP;
- É gerado dois arquivos: o Original e o Cifrado.
Processo de funcionamento na Prática
Conforme podemos ver na Figura 2, o programa gera dois arquivos o original e o cifrado. Na Listagem 1 temos a classe index.php e na Listagem 2 temos a classe geradora. Ambas as listagens estão comentadas para que você possa entender o código.
A criação do aplicativo será dividida em duas partes: a primeira será o desenvolvimento da página denominada index.php, que será a interface do usuário final podendo ele carregar seu arquivos PHP e fazer a criptografia das páginas em tempo real; a segunda parte é denominada funcao.php e ela não possui interface com o usuário final, pois é uma classe desenvolvida para pegar o arquivo PHP enviado pelo usuário e fazer o processo de criptografia e mudança de nome do arquivo.
Crie os Arquivos:
– index.php
– funcao.php
Pasta: – cifrado
Arquivo 1 – index.php
<html> <body> <form action="index.php" method="post" enctype="multipart/form-data"> <input type="file" name="Arquivo" id="Arquivo"><br> <input type="submit" value="Enviar"> <input type="reset" value="Apagar"> </form> <?php if (isset($_FILES["Arquivo"])){ if (!empty($_FILES["Arquivo"])) { //Upload do arquivo. $nome_temporario=$_FILES["Arquivo"]["tmp_name"]; $nome_real=$_FILES["Arquivo"]["name"]; copy($nome_temporario,"cifrado/$nome_real"); // Chamar o arquivo com as Funções. include_once("funcao.php"); // Arquivo que irá ser Cifrado. $arquivo = "cifrado/$nome_real"; // Cria a Class Codificar. $codificador = new Codificar(); // Executa a função de Cifragem $arquivo_c = $codificador->codificador($arquivo); // Se gerar erro apresente o erro. if($codificador->erro()){ $erros=$codificador->pegar_erro(); echo "<pre>"; print_r($erro); } // Se não apresente o resultado. else { print("<p>O arquivo <u>$nome_real</u> foi cifrado com sucesso, Para testar a cifragem acesse: <a href='$arquivo_c'><strong>$arquivo_c</strong></a></p>"); } } } ?> </body> </html>
Arquivo 2 – funcao.php
<?php // Nivel 0 não Cifra nada. // Nivel 10 é o Nivel Padrão Recomendado. // Nivel 30 é o Nivel Maximo acima de 30 pode ocorrer erros e o arquivo ficar muito grande. define("NIVEL_CIFRAGEM", 10); Class Codificar { private $arquivo=""; private $prefixo="cod"; private $arquivo_c=""; private $erro=array(); // Função de Construção. public function __construct($prefixo=""){ if (trim($prefixo)!="") { $this->prefixo=$prefixo; } } // Função de Codificação do Arquivo. public function codificador($arquivo) { if (trim($arquivo)=="") { $this->erro[]="Nome do arquivo não pode ficar em branco na função ".__FUNCTION__; return false; } if (!is_readable($arquivo)){ $this->erro[]="Falha ao abrir o arquivo $arquivo na função ".__FUNCTION__; return false; } $this->arquivo=trim($arquivo); $ext=end(explode(".",$this->arquivo)); $pfx=strrpos($this->arquivo,"."); $arquivo=substr($this->arquivo,0,$pfx); $this->arquivo_c=$arquivo_c=$arquivo."_".$this->prefixo.".".$ext; if(($fp=fopen($arquivo_c,"w+"))===false){ $this->erro[]="Falha ao abrir o arquivo $arquivo_c ao escrever a função ".__FUNCTION__; return false; } else { fwrite($fp,"<?php \r\n"); $linha=file_get_contents($this->arquivo); $linha=str_replace("<?php","",$linha); $linha=str_replace("<?","",$linha); $linha=str_replace("?>","",$linha); $linha=trim($linha); $linha=$this->codificar_string($linha,NIVEL_CIFRAGEM); $linha.="\r\n"; fwrite($fp,$linha); fwrite($fp,"?>"); } fclose($fp); return $arquivo_c; } // Função para codificar o conteúdo do arquivo antes de escrevê-lo. private function codificar_string($string, $levels=""){ if (trim($levels)=="") { $levels=rand(1,9); } $levels=(int) $levels; for ($i=0; $i<$levels;$i++){ $string=base64_encode($string); $string='eval(base64_decode("'.$string.'"));'; } return $string; } // Função para retornar todos os erros encontrados. public function pegar_erro(){ return $this->erro; } // Função para descobrir se havia alguma erro. public function erro(){ if (count($this->erro)>0) { return true; } else { return false; } } } ?>
Olá, muito bom o tutorial, porém testei aqui e percebi que ao descriptografar o arquivo vem sem as tags