PHP mcrypt加密擴充是什嗎?mcrypt擴充的具體介紹

來源:互聯網
上載者:User
具體的項目開發中,有時在前後端互動中我們可能需要對某些資料進行加密。所以PHP中提供了mcrypt加密擴充實現對資料的加密解密。接下來我們就來具體的看一看mcrypt擴充的介紹。

一、mcrypt擴充的安裝

  在低版本的PHP中需要在設定檔php.ini中顯式添加對擴充的引用,同時要保證擴充引用目錄中有相應的擴充檔案;在高版本的PHP中,Windows下似乎預設開啟了mcrypt的擴充,既不需要在設定檔php.ini中做配置,在擴充引用目錄中也沒有看到相應的擴充檔案,在linux下則需要安裝對應的mcrypt.so擴充。

mcrypt擴充支援多種密碼編譯演算法和模式,可以使用mcrypt_list_algorithms()和mcrypt_list_modes()來顯示支援的密碼編譯演算法和加密模式。

二、mcrypt擴充的使用

加密

1、開啟密碼編譯演算法和模式

mcrypt_module_open('tripledes', '', ecb'', '');

第一個參數是使用的密碼編譯演算法的名稱,對應mcrypt_list_algorithms()輸出的密碼編譯演算法;第三個參數對應加密的模式,對應mcrypt_list_modes()輸出的支援加密模式。

2、建立初始化向量

mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

PS.在Window平台下,第二個參數固定使用MCRYPT_RAND

3、初始化加密緩衝區

mcrypt_generic_init($td, $key, $iv);

$td為返回的加密描述符,$key為加密金鑰,$iv為初始化向量

4、資料加密

$encrypted_data = mcrypt_generic($td, $data);

$td為加密描述符,$data為加密前的資料,資料加密函數返回加密後的字串。

5、結束加密,執行清理工作

mcrypt_generic_deinit($td);

解密

1、開啟解密演算法和模式,同上,得到$td解密描述符

2、建立初始化向量,同上,得到$iv初始化向量

3、初始化解密緩衝區

mcrypt_generic_init($td,$key, $iv);

4、資料解密

$decrypted_data = mdecrypt_generic($td, $encrypted_data);

PS.$encrypted_data為解密前的密文,$decrypted_data為解密後的明文。

示範Demo:

<?php    /* 開啟密碼編譯演算法和模式 */    $td = mcrypt_module_open('rijndael-256', '', 'ofb', '');    /* 建立初始向量,並且檢測密鑰長度。      * Windows 平台請使用 MCRYPT_RAND。 */    $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);    $ks = mcrypt_enc_get_key_size($td);    /* 建立密鑰 */    $key = substr(md5('very secret key'), 0, $ks);    /* 初始化加密 */    mcrypt_generic_init($td, $key, $iv);    /* 加密資料 */    $encrypted = mcrypt_generic($td, 'This is very important data');    /* 結束加密,執行清理工作 */    mcrypt_generic_deinit($td);    /* 初始化解密模組 */    mcrypt_generic_init($td, $key, $iv);    /* 解密資料 */    $decrypted = mdecrypt_generic($td, $encrypted);    /* 結束解密,執行清理工作,並且關閉模組 */    mcrypt_generic_deinit($td);    mcrypt_module_close($td);    /* 顯示文本 */    echo trim($decrypted) . "\n";?>

三、實現一個AES加密類

<?php/** * PHP AES加密解密類 * Created by PhpStorm. * User: ahao * Date: 2016/11/3 * Time: 0:03 */class PubEncrypt{    public static $key = '123454536f667445454d537973576562';  // 預設的key    /**     * AES加密     * @param $data  明文     * @param null $key  加密金鑰     * @return array|string     */    public static function AesEncrypt($data, $key = null){        $data = trim($data);        if($data == '') return '';        try{            if(!extension_loaded('mcrypt'))                throw new Exception('當前PHP環境沒有載入mcrypt擴充');            // 開啟密碼編譯演算法和模式            $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');            $key = self::substr($key == null ? self::$key : $key, 0, mcrypt_enc_get_key_size($module));            $iv = substr(md5($key), 0, mcrypt_enc_get_iv_size($module));            // 初始化加密            mcrypt_generic_init($module, $key, $iv);            // 加密資料            $encrypt = mcrypt_generic($module, $data);            // 反初始化釋放資源            mcrypt_generic_deinit($module);            // 關閉資來源物件退出            mcrypt_module_close($module);            return array('status' => true, 'data' => base64_encode($encrypt));        }catch (Exception $e){            $error = $e->getMessage();            $data = array(                'status' => false,                'msg' => $error            );            return $data;        }    }    /**     * AES解密     * @param $encrypted  密文     * @param null $key  解密密鑰     * @return array|string     */    public static function AesDecrypt($encrypted, $key = null){        $encrypted = trim($encrypted);        if($encrypted == '')  return '';        try{            if(!extension_loaded('mcrypt'))                throw new Exception('當前PHP環境沒有載入mcrypt擴充');            $encrypted = base64_decode($encrypted);            $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');            $key = self::substr($key == null ? self::$key : $key, 0, mcrypt_enc_get_key_size($module));            $iv = substr(md5($key), 0, mcrypt_enc_get_iv_size($module));            mcrypt_generic_init($module, $key, $iv);            $decrypted = mdecrypt_generic($module, $encrypted);            mcrypt_generic_deinit($module);            mcrypt_module_close($module);            return array('status' => true, 'data' => rtrim($decrypted,"\0"));        }catch (Exception $e){            $error = $e->getMessage();            $data = array(                'status' => false,                'msg' => $error            );            return $data;        }    }    /**     * 截取字串     * @param $string  被截取的字串     * @param $start   起始位置     * @param $length  截取長度     * @return string  截取到的字串     */    private static function substr($string, $start, $length)    {        return extension_loaded('mbstring') ? mb_substr($string,$start,$length,'8bit') : substr($string,$start,$length);    }}

PS.使用資料加密的好處:資料在前後台之間進行傳輸的是一個加密後的字串,可以防止資料被爬蟲抓包,避免敏感性資料的泄露,也可以有效防止猜測出資料項目對資料操作介面進行惡意請求

二、mcrypt擴充的使用

加密

1、開啟密碼編譯演算法和模式

mcrypt_module_open('tripledes', '', ecb'', '');

第一個參數是使用的密碼編譯演算法的名稱,對應mcrypt_list_algorithms()輸出的密碼編譯演算法;第三個參數對應加密的模式,對應mcrypt_list_modes()輸出的支援加密模式。

2、建立初始化向量

mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

PS.在Window平台下,第二個參數固定使用MCRYPT_RAND

3、初始化加密緩衝區

mcrypt_generic_init($td, $key, $iv);

$td為返回的加密描述符,$key為加密金鑰,$iv為初始化向量

4、資料加密

$encrypted_data = mcrypt_generic($td, $data);

$td為加密描述符,$data為加密前的資料,資料加密函數返回加密後的字串。

5、結束加密,執行清理工作

mcrypt_generic_deinit($td);

解密

1、開啟解密演算法和模式,同上,得到$td解密描述符

2、建立初始化向量,同上,得到$iv初始化向量

3、初始化解密緩衝區

mcrypt_generic_init($td,$key, $iv);

4、資料解密

$decrypted_data = mdecrypt_generic($td, $encrypted_data);

PS.$encrypted_data為解密前的密文,$decrypted_data為解密後的明文。

相關推薦:

php加密擴充mcrypt的使用總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.