《PHP應用:php基于mcrypt的加密解密實例》要點:
本文介紹了PHP應用:php基于mcrypt的加密解密實例,希望對您有用。如果有疑問,可以聯系我們。
PHP教程本文實例講述了php基于mcrypt實現加密解密的辦法.分享給大家供大家參考.具體實現辦法如下:
PHP教程PHP中自帶了相當多的加密的方法,這里我們來看一下mcrypt擴展的使用方式.也是在工作中需要用這個東西加密拜訪用戶的Cookie的值,認真的學習了這個方面的內容.
PHP教程1.簡介
PHP教程Mcrypt是PHP的一個擴展,完成了常用加密算法的封裝.其實該擴展是對mcrypt標準類庫的封裝,mcrypt完成了相當多的常用加密算法,如DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 和 GOST加密算法,并且提供了CBC、OFB、CFB 和 ECB 四種塊加密的模型.
PHP教程2.安裝和使用
PHP教程要使用該擴展,必須首先安裝mcrypt標準類庫,可以在http://mcrypt.sourceforge.net 下載.該擴展的編譯和安裝方式和常規的php擴展相同,不在詳細說明了.
PHP教程3.四種塊加密模型
PHP教程Mcrypt支持四種塊加密模型,簡要說明如下:
PHP教程①. MCRYPT_MODE_ECB(electronic codebook) 適合對小數量隨機數據的加密,比如加密用戶的登錄暗碼之類的.
PHP教程②. MCRYPT_MODE_CBC (cipher block chaining) 適合加密平安等級較高的重要文件類型.
PHP教程③. MCRYPT_MODE_CFB (cipher feedback) 適合于需要對數據流的每一個字節進行加密的場合.
PHP教程④. MCRYPT_MODE_OFB (output feedback, in 8bit) 和CFB模式兼容,但比CFB模式更平安.CFB模式會引起加密的錯誤擴散,如果一個byte出錯,則其后續的所有byte都會出錯.OFB模式則不會有此問題.但該模式的平安度不是很高,不建議使用.
PHP教程⑤. MCRYPT_MODE_NOFB (output feedback, in nbit) 和OFB兼容,由于采用了塊操作算法,平安度更高.
PHP教程⑥. MCRYPT_MODE_STREAM 是為了WAKE或者RC4等流加密算法提供的額外模型.
PHP教程NOFB和STREAM僅當mycrypt的版本號大于等于libmcrypt-2.4.x才有效.(現在基本上都是大于這個版本了,libmcrypt的最新主版本已經到4了)
PHP教程4.查看支持的算法和模型
PHP教程①. mcrypt_list_modes()列出當前環境支持的模型
PHP教程②. mcrypt_list_algorithms()列出當前環境支持的算法
PHP教程如命令行執行:
代碼如下:
php -r "var_dump(mcrypt_list_modes()); var_dump(mcrypt_list_algorithms());"
即可列出所有的結果.
PHP教程5.如何使用
PHP教程示例1:
代碼如下:
<?php
$key = "this is a secret key";
$input = "Let us meet at 9 o'clock at the secret place.";
$encrypted_data = mcrypt_ecb (MCRYPT_3DES, $key, $input, MCRYPT_ENCRYPT);
?>
PHP教程最簡單的方式如示例1中所示,該辦法表明對$input使用3DES的算法進行加密,加密密鑰是$key.不過這中直接調用的辦法已經不被官方推薦使用,也建議大家在開發中不要使用此種方式,不一定哪天該辦法就不能用了.在php5下使用此種方式調用時,能看到一條warning信息,提示“PHP Warning: attempt to use an empty IV, which is NOT recommend”.
PHP教程官方推薦的使用方式如示例2所示
PHP教程示例2:
代碼如下:
<?php
??? $key = "this is a secret key";
??? $input = "Let us meet at 9 o'clock at the secret place.";
??? // 打開mcrypt,或者mcrypt類型的資源對象,該對象使用ecb模式,使用3des作為加密算法.
??? $td = mcrypt_module_open('tripledes', '', 'ecb', '');
??? // 創建iv(初始化向量)
??? $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
??? // 根據密鑰和iv初始化$td,完成內存分配等初始化工作
??? mcrypt_generic_init($td, $key, $iv);
??? // 進行加密
??? $encrypted_data = mcrypt_generic($td, $input);
??? // 反初始化$td,釋放資源
??? mcrypt_generic_deinit($td);
??? // 關閉資源對象,退出
???? mcrypt_module_close($td);
?>
上述過程完成了數據的加密過程.首先選擇加密算法和加密模式創建mcrypt的資源對象和IV,然后初始化加密所需的buffer(內存),進行加密后再釋放buffer,最后關閉資源對象.
PHP教程解密的過程和加密是基本相同,只要把mcrypt_generic($td, $input)替換成mdecrypt_generic($td, $input)就可以了,其它部分完全相同.當然,對于3des這種對稱加密算法而言,加密、解密所用的key是必須完全相同的.
PHP教程6. 有關IV
PHP教程不是所有的模型中都需要IV. CFB和OFB是必須有IV, CBC和EBC則是可選的.對于必選IV的模式來說,其加密和解密的IV的值必須完全相同,CBC和EBC則無此要求.可以相同也可以不同,沒什么關系.
PHP教程7.一個簡單功能的加密解密類
代碼如下:
class AMPCrypt {
??? private static function getKey(){
??????? return md5('exampleKey');
???? }
??? public static function encrypt($value){
???????? $td = mcrypt_module_open('tripledes', '', 'ecb', '');
???????? $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
???????? $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
???????? mcrypt_generic_init($td, $key, $iv);
???????? $ret = base64_encode(mcrypt_generic($td, $value));
???????? mcrypt_generic_deinit($td);
???????? mcrypt_module_close($td);
??????? return $ret;
???? }
??? public static function dencrypt($value){
???????? $td = mcrypt_module_open('tripledes', '', 'ecb', '');
???????? $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
???????? $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
???????? $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
???????? mcrypt_generic_init($td, $key, $iv);
???????? $ret = trim(mdecrypt_generic($td, base64_decode($value))) ;
???????? mcrypt_generic_deinit($td);
???????? mcrypt_module_close($td);
??????? return $ret;
???? }
}
PHP教程PS:關于加密技術,本站還提供了如下加密工具供大家參考使用:
PHP教程MD5在線加密工具:
PHP教程Escape加密/解密工具:
PHP教程在線SHA1加密工具:
PHP教程短鏈(短網址)在線生成工具:
PHP教程短鏈(短網址)在線還原工具:
PHP教程高強度暗碼生成器:
PHP教程希望本文所述對大家的PHP程序設計有所贊助.
歡迎參與《PHP應用:php基于mcrypt的加密解密實例》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.fzlkiss.com/jiaocheng/14413.html