質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

703閲覧

PHPでOpenSSL復号化が出来ない

patapata5050

総合スコア34

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/11/25 05:53

編集2017/12/04 08:20

###前提・実現したいこと

PHPで下記のようなことを実現したいと思っています。

  1. メールアドレスを暗号化
  2. URLに暗号化データを持たせる
  3. header('Location: URL')にてページ遷移
  4. 遷移先のページにてGETで暗号化データを受け取る
  5. 受け取った暗号化データを復号化

###動作環境

開発環境
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エンコードあたりが怪しいのではないかと考えましたが、結局原因がわからず質問させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/01 11:02

INSTALLされている OPENSSL のバージョンは?(修正でいれてね)
patapata5050

2017/12/04 08:21

コメントありがとうございます! 追記しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問