我尝试使用PHP中的功能加密一些文本

时间:2017-04-23 13:10:36

标签: php encryption base64

我在网上找到了关于如何在php中加密字符串的教程,但是当我调用该函数并尝试回显处理过的数据时,我得到500内部错误。以下是我的代码。

 <?php



    $iv_to_pass_to_decryption = 'mysecretpass';
    function encrypt($text, $key)
    {
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND); 
        $iv_to_pass_to_decryption = base64_encode($iv);
        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv); 
    }




    function decrypt($text, $key, $iv)
    { 
        $text = base64_decode($text);
        $iv = base64_decode($iv);
        return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
    }


    $txt = "hello";
    $mykey = "mysecretkey";
    $somedata = encrypt($txt, $mykey);

    echo $somedata;




    ?>

2 个答案:

答案 0 :(得分:0)

第一个问题是,你错过了第8行的)

第二个问题是mcrypt_decrypt()函数已被弃用。

第三个问题是mcrypt_encrypt():此算法不支持大小为11的密钥。仅支持尺寸为16,24或32的按键。 &#39; mysecretkey&#39;关键是错误的。

我建议您使用crypt()功能:http://php.net/manual/en/function.crypt.php

  

验证密码时,字符串比较功能不是   应该用易受时间攻击来比较输出   crypt()到先前已知的哈希。 PHP 5.6以上提供   hash_equals()就此而言。

答案 1 :(得分:-2)

使用下面的代码希望它能帮到你

    $iv_to_pass_to_decryption = 'mysecretpass';
    function encrypt($text, $key)
    {
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND); 
        $iv_to_pass_to_decryption = base64_encode($iv);
        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv));
    }




    function decrypt($text, $key, $iv)
    { 
        $text = base64_decode($text);
        $iv = base64_decode($iv);
        return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
    }


    $txt = "hello";
    $mykey = "mysecretkey12345";
    $somedata = encrypt($txt, $mykey);

    echo $somedata;