PHP には mcrypt という暗号化に関する拡張モジュールがあるのですが長年放置されてしまっているため現在は OpenSSL を使った暗号化が一般的です。
基本的にはパスワードと初期化ベクトル(Initialization Vector)を用いて暗号化と複合を行います。暗号化に利用できる方式はサーバーによって異なるため、事前に openssl_get_cipher_methods() を使って利用可能な暗号化方式を確認しておきます。
<?php // 暗号化するデータ $data = 'Hello, World!'; // パスワード $password = 'password1234'; // 利用可能な暗号化方式一覧 //$methods = openssl_get_cipher_methods(); // 暗号化方式 $method = 'aes-128-cbc'; // 方式に応じたIV(初期化ベクトル)に必要な長さを取得 $ivLength = openssl_cipher_iv_length($method); // IV を自動生成 $iv = openssl_random_pseudo_bytes($ivLength); // OPENSSL_RAW_DATA と OPENSSL_ZERO_PADDING を指定可 $options = 0; // 暗号化 $encrypted = openssl_encrypt($data, $method, $password, $options, $iv); var_dump($encrypted); // 復号 $decrypted = openssl_decrypt($encrypted, $method, $password, $options, $iv); var_dump($decrypted);
結果は base64_encode() された状態で返ります。元のバイナリデータが必要な場合 $options に OPENSSL_RAW_DATA を指定して下さい。
ログイン用パスワードをデータベースに保管する場合など、復号の必要が無い場合は password_hash() の方を利用するのが安全です。
【参考】 OpenSSL関数(http://php.net/manual/ja/ref.openssl.php)Similar Posts:
- [PHP]Laravel5をOS X(Mac)のローカルサーバーにインストールする
- [PHP]最低限覚えておきたい必須関数一覧
- [PHP]GDで作った画像をファイル化せずに直接<img>タグで表示する
- [PHP]10進数を任意の文字を使って62進数などのn進数に相互変換する(基数変換)
- [PHP]画像を連結して数値を表示する
- [PHP]Symfony 4 とデータベースを使ったCRUDアプリケーションの作り方
- [PHP, JS]jQueryのAjaxによるPHP、Javascript間の送受信(JSON)
- [PHP]Symfonyを使ったメールフォームの作り方