実現したいこと
jsで暗号化した情報を、PHPで復号し情報の整合性を判断したいです。
前提
js側の暗号化・PHPの復号は、下記の記事を参考にさせていただき実装しています。
https://techblog.gracetory.co.jp/entry/2022/07/20/120000
js・PHPどちらのソースコードも見本をそのまま使用させていただいております。
※現状特に不具合や懸念点はありません。
暗号化した情報をURLのパラメータとして展開、PHP側で取得($_GET)し下記のプログラムで復号しています。
php
1function decrypt($cipher, $passphrase, $salt, $iv){ 2 $iterations = 100; 3 $key = hash_pbkdf2("sha512", $passphrase, hex2bin($salt), $iterations, 128); 4 $plain= openssl_decrypt(base64_decode($cipher), "AES-256-CBC", hex2bin($key), OPENSSL_RAW_DATA, hex2bin($iv)); 5 return $plain; 6}
発生している問題・エラーメッセージ
問題点は以下の2点です
■暗号化された文字列に一定の確率で「+」が含まれる。(そもそもこれを避ける方法があればベスト)
■GETした「+」の含まれる文字列を関数などに渡すと「+」が「スペース」として認識されてしまう。
例えば、パラメータ「prm=sample+hogehoge」のような値が合った場合、
(上記decrypt関数において)「$cipher = $_GET['prm'];」として処理すると「sample hogehoge」として認識されるので復号の際に適切な値として判断されません。
ただ、「$cipher = 'sample+hogehoge';」のように直接文字列を入れれば正常に動くので、関数自体には問題があるわけではなく、
あくまでPHPで「+」を文字列として扱う方法が知りたいというのが質問の趣旨です。
試したこと
ChatGPTの指示でリプレイスやエンコードなども試してみましたが、いずれも上手くいきませんでした。
その他
大変恐縮ですが、パラメータに暗号含めるのどうなの?みたいなご指摘は一旦無しでお願いします…
何かアドバイスいただけますと幸いです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー