前提・実現したいこと
openssl_encryptで暗号化した文字列をURLのパラメータにして、
そのURLでアクセスした際に復号して処理を行いたいです。
発生している問題
復号後の文字列が取得できません。
該当のソースコード
PHP
1// 暗号化処理 2$key = hash('sha256', Configure::read("OPEN_SSL_KEY")); 3$cipher = 'aes-256-cbc'; 4$iv = substr(hash('sha256', Configure::read("OPEN_SSL_IV")), 0, 16); 5$options = 0; 6$plain_text = 'sampletext'; 7$encrypt = openssl_encrypt($plain_text, $cipher, $key, $options, $iv); 8$url_text = str_replace(array('+', '/', '='), array('~', '-', '.'), $encrypt);
PHP
1// 復号処理 2$key = hash('sha256', Configure::read("OPEN_SSL_KEY")); 3$cipher = 'aes-256-cbc'; 4$iv = substr(hash('sha256', Configure::read("OPEN_SSL_IV")), 0, 16); 5$options = 0; 6$encrypt = str_replace(array('~','-', '.'), array('+', '/', '='), $param); 7$decrypt = openssl_decrypt($encrypt, $cipher, $key, $options, $iv);
2つの処理は同プロジェクトの別Controllerで行っています。
OPEN_SSL_KEYとOPEN_SSL_IVの値は適当な文字列で、$keyと$ivをログに出して確認したところ、暗号と復号で同じものが出ていました。
試したこと
暗号化を扱うのが初めてだったため、このあたりの記事を参考に処理を書きました。
https://gist.github.com/joashp/a1ae9cb30fa533f4ad94
https://shinobit.net/archives/131
暗号処理の$encryptと復号処理の$encryptは同じものが取得できているのですが、
$decryptをログに出すと空になっておりその後の処理ができない状態です。
試しに復号処理の中で暗号化→復号を行ってみましたが問題なく行えました。
しかし復号処理内で元の平文を暗号化すると、$encryptとは別の値になってしまいました。
$keyと$ivが同じであれば復号できると解釈していたのですが、別のControllerでやると変わってしまうとかありますか?
運用するとなると同じ処理内で暗号化→復号することはあまりないと思うので、何かやり方をご存知であれば教えていただきたいです。
よろしくお願い致します。
バージョン情報
PHP 7.2.26
CakePHP 3.8.6
回答1件
あなたの回答
tips
プレビュー