【PHP】文字列を暗号化しGETで値を渡す方法
GETで送るとURLに色々と値が入りセキュリティ的によくないので
渡す値を暗号化して渡すようにしたときのメモです。
ネットで調べるとopenssl_encrypt、openssl_decryptで暗号化、複合化でやればいいようですが、
最初にやったところ暗号化の文字列に「?」が入り、URLとして送ることができない事象が起きました。
どうもURLの中に
そこで暗号文を16進数にして値を渡すことにしました。
色々なサイトを参考したのですが、そのままだとできなかったので
ちょっと簡略化していますが、とりあえずうまくいきました。
2つの変数を渡すことを想定しています。
そのまた[文字列,文字列]でカンマ区切りで渡すことにします。
$plain_text = "test,111111"; //暗号化したい文字列
$method_name = 'AES-256-CBC'; //暗号方式
$key_string = '1234567890'; //暗号キー 任意 長いほど良い
$encrypt_bin = openssl_encrypt($plain_text,$method_name,$key_string); //暗号化
$url = bin2hex($encrypt_bin); // 16進数に変換
これで下記のように次のページにPOSTします。
https://localhost/test.php?url=$url
遷移先のページのPHPにて下記のようにurlを取得して複合化します。
$url = $_GET["url"];
$text = hex2bin($text);
$method_name = 'AES-256-CBC'; //暗号方式
$key_string = '1234567890'; //暗号キー 上記と合わせる
$decrypt_string = openssl_decrypt($text,$method_name,$key_string); // 復号化
$data = explode(',', $decrypt_string); //カンマ区切りで配列に挿入
$data0 = $data[0];
$data1 = $data[1];