Code Igniter User Guide Version 1.5.2


Classe Criptografia

A Classe Criptografia provê a criptografia de dados em duas vias. Ela usa um esquema que pré-compila a mensagem usando um processo de codificação binária XOR via um algoritmo de dispersão randômico (randomly hashed bitwise XOR encoding scheme), que é então criptografado usando a biblioteca Mcrypt. Se a Mcrypt não estiver disponível no seu servidor, a mensagem codificada ainda manterá um razoável grau de segurança para sessões criptografadas ou outros propósitos "leves" como esse. Se a Mcrypt estiver disponível, você terá, efetivamente, uma mensagem string bicriptografada, que deverá prover um alto grau de segurança.

Configurando sua Chave

Uma chave é um pedaço de informação que controle o processo de criptografia e permite que uma string criptografada seja decodificada. De fato, a chave que você escolher fornecerá as únicas maneiras de decodificar os dados que foram criptografados com essa chave, por isso não apenas você deve escolhê-la com cuidado, como também nunca a alterar, se sua intenção for usá-la para dados persistentes.

Nem é preciso dizer que você deve guardar sua chave com cuidado. Se alguém obtier acesso a ela, seus dados poderão ser facilmente decodificados. Se seu servidor não estiver sob seu total cntrole, é impossível garantir a segurança da chave, por isso, pense duas vezes antes de usá-la para qualquer coisa que requeira alta segurança, como números de cartão de crédito.

Para obter o máximo do algoritmo de criptografia, sua chave deverá ter o comprimento 32 caracteres (128 bits). A chave deverá ser a mais doida que você conseguir bolar, com números e letras maiúsculas e minúsculas. Sua chave não deve ser uma simples string. Para ser criptograficamente segura, ela precisa ser a mais randômica possível.

Sua chave pode ser armazenada em seu aquivo application/config/config.php, ou você pode projetar seu próprio sistema de armazenamento, e passar dinamicamente a chave quando estiver codificando/decodificando.

Para salvar sua chave para seu arquivo application/config/config.php, abrá-o e configure:

$config['encryption_key'] = "SUA CHAVE";

Comprimento da Menssagem

É importante saber que as mensagens codificadas, geradas pela função de criptografia, são aproximadamente 2.6 vezes mais longas que a mensagem original. Por exemplo, se você criptogravar a string "meu dado super secreto", que tem 21 caracteres, terminará com uma string codificada que terá mais ou menos 55 caracteres (dizemos "mais ou menos" pois o comprimento da string codificada é incrementada em clusters de 64 bits, e por isso não é exatamente linear). Lembre-se desta informação quando selecionar seu mecanismo de armazenamento. Cookies, por exemplo, podem apenas conter 4K de informação.

Inicializando a Classe

Como a maioria das classes no Code Igniter, a classe de Criptografia é inicializada em seu controller usando a função $this->load->library:

$this->load->library('encrypt');

Uma vez carregada, o objeto estará disponível usando: $this->encrypt

$this->encrypt->encode()

Gerar a criptografia do dado e retorná-o como uma string. Exemplo:

$msg = 'Minha mensagem secreta';

$encrypted_string = $this->encrypt->encode($msg);

Você pode, opcionalmente, passar sua chave de criptografia via o segundo parâmetro se não desejar usar a que está em seu arquivo de configuração;:

$msg = 'Minha mensagem secreta';
$key = 'chave-super-secreta';

$encrypted_string = $this->encrypt->encode($msg, $key);

$this->encrypt->decode()

Descriptografa a string codificada. Exemplo:

$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';

$textopuro_string = $this->encrypt->decode($encrypted_string);

$this->encrypt->set_cipher();

Permite que você configure uma cifra Mcrypt. Por default, é usado MCRYPT_RIJNDAEL_256. Exemplo: $this->encrypt->set_cipher('MCRYPT_BLOWFISH');

Por favor, visite o php.net para uma lista das cifras disponíveis.

Se você desejar testar manualmente se seu servidor suporta a Mcrypt, você pode usar:

echo ( ! function_exists('mcrypt_encrypt')) ? 'Nao' : 'Sim';

$this->encrypt->set_mode();

Permite configurar um mod Mcrypt. Por default, é usado MCRYPT_MODE_ECB. Exemplo: $this->encrypt->set_mode('MCRYPT_MODE_CFB');

Por favor, visite o php.net para uma lista dos modos disponíveis.

$this->encrypt->sha1();

É a função de codificação SHA1. Forneça uma string e ela irá retornar um hash de 160 bit de via única. Nota: SHA1, assim como o MD5, não é decodificável. Exemplo:

$hash = $this->encrypt->sha1('Alguma string');

Várias instalações PHP têm suporte à SHA1 por default. Por isso, se tudo que você precisa fazer é codificar o hash, é mais simples usar a função nativa:

$hash = sha1('Alguma string');

Se seu servidor não suportar o SHA1, pode usar a função fornecida aqui.