mcrypt_decrypt работает неправильно

Я работаю над простым 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?

заранее спасибо

Чара

Я использую что-то подобное для своего проекта, попробуйте!

 $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 

Не знаю, является ли это правильным ответом, но вы определенно не должны определять константу, называемую string поскольку это зарезервированное ключевое слово в PHP.