Pergunta

Eu não tenho idéia do que estou fazendo de errado. Eu só preciso ser capaz de criptografar e descriptografar sem obter caracteres estranhos ou avisos. Ele diz que eu deveria estar usando uma IV de comprimento de 16 e que eu estou usando um comprimento de 9, mas "0123456789abcdef" é de 16 caracteres.

Atenção: mcrypt_generic_init () [function.mcrypt-generic-init]: tamanho Iv incorreta; comprimento fornecido: 9, necessário: 16 em /home/mcondiff/public_html/projects/enc/enc.php na linha 10

Consulte http://www.teamconcept.org/projects/enc/enc. php

Eu estou perdido, confuso, um pouco tonto. Aqui eu vou a partir daqui? Eu tenho que usar essa criptografia e fazê-lo funcionar para um projeto.

<?php

class enc
{
    function encrypt($str, $key) {
        $key = $this->hex2bin($key);

        $td = mcrypt_module_open("rijndael-128", "", "cbc", "fedcba9876543210");

        mcrypt_generic_init($td, $key, CIPHER_IV);
        $encrypted = mcrypt_generic($td, $str);

        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);

        return bin2hex($encrypted);
    }

    function decrypt($code, $key) {
        $key = $this->hex2bin($key);
        $code = $this->hex2bin($code);

        $td = mcrypt_module_open("rijndael-128", "", "cbc", "fedcba9876543210");

        mcrypt_generic_init($td, $key, CIPHER_IV);
        $decrypted = mdecrypt_generic($td, $code);

        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);

        return utf8_encode(trim($decrypted));
    }

    function hex2bin($hexdata) {
        $bindata = "";

        for ($i = 0; $i < strlen($hexdata); $i += 2) {
            $bindata .= chr(hexdec(substr($hexdata, $i, 2)));
        }

        return $bindata;
    }

}

$theEncryption = new enc();
$user = "John Doe";
$email = "john@example.com";
$user = $theEncryption->encrypt($user, "0123456789abcdef");

$email = $theEncryption->encrypt($email, "0123456789abcdef");

echo 'User: '.$user;
echo 'Email: '.$email;

?>

Can somone me aponte na direção certa ou apontar o que estou fazendo de errado?

Graças

Mike

Foi útil?

Solução

CIPHER_IV é provavelmente uma constante indefinida. PHP gera um aviso "Utilização de constante indefinida" e, em seguida, usa a "constante" como string. A string "CIPHER_IV" é de 9 caracteres.

Outras dicas

Em seu arquivo php, faça uma impressão de CIPHER_IV e ver o que ele contém.

Consulte http://us2.php.net/mcrypt_generic_init para as especificidades

Você provavelmente copiar-colar o código a partir de um blog: pesquisando mcrypt_generic_init CIPHER_IV só dá este post e um blog;)

O IV é um parâmetro que é necessário especificar a função, não uma constante que o primeiro posto blogger em interpretando mal o artigo do segundo blogger.

Na http://propaso.com/blog/?cat=6 , eles declaram estes:

$secret_key = "01234567890abcde";
$iv         = "fedcba9876543210";

e, em seguida, fazer:

mcrypt_generic_init($td, $secret_key, $iv);

Simplesmente declarar o seu IV ser alguma coisa, então usá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top