###前提・実現したいこと
PHPで下記のようなことを実現したいと思っています。
- メールアドレスを暗号化
- URLに暗号化データを持たせる
- header('Location: URL')にてページ遷移
- 遷移先のページにてGETで暗号化データを受け取る
- 受け取った暗号化データを復号化
###動作環境
開発環境
Docker
PHP 5.6.30
OpenSSL 1.0.1t
本番環境
AWS EC2
PHP 5.6.32
OpenSSL 1.0.2k-fips
###発生している問題・エラーメッセージ
開発環境(Docker)では問題なく動作していたのですが、実際にサーバーでテストをした所復号化がうまくできませんでした。
openssl_error_stringでエラーを表示した所、下記のようなエラーが表示されました。
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
###該当のソースコード
暗号化には下記のクラスを使っています
https://github.com/mpyw/EasyCrypt
PHP
1require_once("easy_crypt.inc"); 2$crypt_class = new Cryptor(); 3 4if ($_POST['Submit_encryption']) { 5 $email = "example@hoge.com"; 6 7 //メールアドレス文字列を暗号化 8 $encrypted_email = $crypt_class->encrypt($email, 'abcd1234'); 9 10 $params = array( 11 'Submit_decryption' => 'x', 12 'ma' => $encrypted_email, 13 't' => time() 14 ); 15 16 header("Location: ?".http_build_query($params, '', '&')); 17 exit(); 18} 19 20//ここで復号化ができているかチェック 21if ($_GET['Submit_decryption']) { 22 echo 'ma = '.$_GET['ma']; //暗号化データが入っている 23 $decrypted_email = $crypt_class->decrypt($_GET['ma'], 'abcd1234'); 24 echo 'decrypted_email = '.$decrypted_email; //ここで何も表示されない 25} 26
HTML
1<html> 2 <body> 3 <form action="?" method="POST"> 4 <button name="Submit_encryption" value="x">送信</button> 5 </form> 6 </body> 7</html>
###試したこと
テストで下記のように実行した所、問題なく復号化が出来ました。
PHP
1 2//メールアドレス文字列を暗号化 3$encrypted_email = $crypt_class->encrypt('example@hoge.com', 'abcd1234'); 4//復号化 5$decrypted_email = $crypt_class->decrypt($encrypted_email, 'abcd1234'); 6 7echo "decrypted_email = ".$decrypted_email;
この結果から、恐らくURLエンコードあたりが怪しいのではないかと考えましたが、結局原因がわからず質問させていただきました。
あなたの回答
tips
プレビュー