PHP 暗号化、複合化

ここではPHPの暗号化、複合化について解説していきます。
データベースに暗号化のパスワードを保存しておき複合化で暗号化した前の状態に複合化させます。

<?php

    /** 暗号キー **/
    define('KEY', 'kbkb kja  ihkhb gtev555yihj8sj gdigyjeu 8nkfd');
    define('IV', '9Aih3ysn0Ty5po90i7M3xUqXwlhs2g6VGJ8LAEjita5=');

    /**
     * 暗号化
     * @param type $data
     * @return string
     */
    function getEncrypt($data) {
        $resource = mcrypt_module_open('rijndael-256', '', 'ofb', '');
        $iv = substr(base64_decode(str_rot13(IV)), 0, mcrypt_enc_get_iv_size($resource));
        $ks = mcrypt_enc_get_key_size($resource);
        $key = substr(md5(KEY), 0, $ks);
        mcrypt_generic_init($resource, $key, $iv);
        $encrypt = mcrypt_generic($resource, $data);
        mcrypt_generic_deinit($resource);
        mcrypt_module_close($resource);
        return base64_encode($encrypt);
    }

    /**
     * 複合化
     * @param type $data
     * @return string
     */
    function getDecrypt($data) {
        $resource = mcrypt_module_open('rijndael-256', '', 'ofb', '');
        $iv = substr(base64_decode(str_rot13(IV)), 0, mcrypt_enc_get_iv_size($resource));
        $ks = mcrypt_enc_get_key_size($resource);
        $key = substr(md5(KEY), 0, $ks);
        mcrypt_generic_init($resource, $key, $iv);
        $decrypt = mdecrypt_generic($resource, base64_decode($data));
        mcrypt_generic_deinit($resource);
        mcrypt_module_close($resource);
        return $decrypt;
    }

解説
KEYとIVを定数として定義して変更しなければ常に同じ暗号化、複合化ができます。
パスワードを変更する仕様がきたときにどうぞ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください