
JavaScript(以下JS) と PHP での暗号化・復号について質問です.
JSでの暗号化には CryptoJS,
PHP側での復号にはopenssl_decryptを使います.
以下のようにJSで暗号したのですが、PHPで復号できず困っています.
セキュリティ的に安全であれば他の方法でも構いませんので、どこが原因かご教示いただけると幸いです!!
JS側での暗号化
lang
1 // 暗号化用パス 2 var secretPass = CryptoJS.enc.Utf8.parse('pass'); 3 // ランダム値生成してsaltを設定 4 var salt = CryptoJS.lib.WordArray.random(128 / 16); 5 // 暗号化で使うキーを設定(先ほど作ったsecretPassとsaltを使用) 6 var key = CryptoJS.PBKDF2(secretPass, salt, {keySize: 128 / 16, iterations: 1000 }); 7 //初期化ベクトル 8 var iv = CryptoJS.lib.WordArray.random(128 / 16); 9 //暗号化オプション(IV:初期化ベクトル, CBCモード, パディングモード:PKCS7) 10 var options = {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}; 11 //暗号化内容のエンコーディングは「UTF-8」 12 var baseText = CryptoJS.enc.Utf8.parse('IWantToDecryptThisString'); 13 14 //暗号化 15 var encrypted = CryptoJS.AES.encrypt(baseText, key, options);
PHPでは復号のメソッドを作り、openssl_decrypt関数を実行した時点での
ログを出力したところ、返り値は空っぽでした.
以下PHPの復号メソッドで、引数自体は渡ってきてます.
$encData : yWvjtqSQKl8kzJwgeri%2BtA%3D%3D
$iv : 49bb573d407b4b64d20445f0c4b20279
$key : bcbc43c15b482e4579529039ecbd32345b2f462f796f904a0eceffed93d5186da7f609c40a303f497a68615e14474b5f73f7f66bb80df298d5918fc1a9120eec
$encData : bnqTjLlAWs0aAZZkX7kZnw==
$iv : 682efaee374ec613
$key : 5b4076f60e3fb3a0649a5fcf1fb71e551f634a5017b6d529cffc65c06eb34724
lang
1 public function decData( $encData, $iv, $key ){ 2 $decData = ''; 3 // 復号に使うメソッド 4 $method = 'AES-128-CBC'; 5 // 復号に使うオプション 6 $options = 'OPENSSL_RAW_DATA'; 7 8 // 復号 9 //$decData = openssl_decrypt(pack("H*", $encData), $method, $key, $options, $iv); 10 $urlDecodeEncData = urldecode($encData); 11 $decData = openssl_decrypt($urlDecodeEncData, $method, $ky, $options, $iv); 12 13$this->log('復号処理結果', LOG_INFO); 14// 以下のログは空っぽでした 15$this->log($decData, LOG_INFO); 16 17 return $decData; 18 }

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/02/13 14:43
退会済みユーザー
2018/02/13 16:23
退会済みユーザー
2018/02/13 16:26
退会済みユーザー
2018/02/13 22:44
2018/02/14 03:13
2018/02/14 03:16