mcrypt_decrypt无法正常工作

时间:2012-07-18 09:47:26

标签: php encryption

我正在研究一个简单的Zend应用程序,我需要在将所有财务数据存储到数据库之前对其进行加密,并在需要时对其进行解密。我使用了mcrypt_encrypt()mcrypt_decrypt()。由于我需要解密数字,我使用了一个恒定的初始化向量(iv),这是完全没有推荐的。

这是我的代码:

define ('string','WdryhedeescmsfkirYNemsjdesapQ');
define ('iv', '$356?dWuSkm)@g%dnw#8mA*');

class FormatValues {

 const string= 'WdryhedeescmsfkirYNemsjdesapQ';
 const iv = '$356?dWuSkm)@g%dnw#8mA*';

 public function encrypt($val){
    $enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $val,self::string , MCRYPT_MODE_CBC,self::iv);
    return $enc;
 }

 public function decrypt($val){
    $dec = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $val,self::string , MCRYPT_MODE_CBC,self::iv), "\0");
    return $dec;

 }
}

encrypt()方法对数据进行加密,但在解密时,它没有给出正确的数字。

这是为什么?是否有其他方法可以加密和解密数据而无需使用常量iv?

提前致谢

Charu

2 个答案:

答案 0 :(得分:4)

我在项目中使用类似的东西,试试吧!

$key = 'password to (en/de)crypt';
$string = ' string to be encrypted '; // note the spaces

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

echo 'Encrypted:' . "\n";
var_dump($encrypted);

echo "\n";

echo 'Decrypted:' . "\n";
var_dump($decrypted); // spaces are preserved

答案 1 :(得分:0)

不知道它是否是正确的答案但是,你绝对不应该定义一个名为string的常量,因为它是PHP中的保留关键字。