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