PHP擴(kuò)展mcrypt實(shí)現(xiàn)的AES加密功能示例
本文實(shí)例講述了PHP擴(kuò)展mcrypt實(shí)現(xiàn)的AES加密功能。分享給大家供大家參考,具體如下:
對(duì)于此算法網(wǎng)上流傳有很多php代碼實(shí)現(xiàn)的版本,其實(shí)php的擴(kuò)展mcrypt完全支持此加密算法,不必要自己去寫(xiě)代碼實(shí)現(xiàn)。先不說(shuō)自己寫(xiě)費(fèi)時(shí)費(fèi)力(當(dāng)然你若是想研究此加密算法,那另說(shuō)),使用php代碼實(shí)現(xiàn)的算法效率也不會(huì)太高。
mcrypt擴(kuò)展在php中默認(rèn)是沒(méi)有的,需要自己安裝配置,其方法可以在網(wǎng)上搜索,這里不在詳述。你可以使用以下代碼檢查你的php環(huán)境是否支持mcrypt
$cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表 $mode_list = mcrypt_list_modes(); //mcrypt支持的加密模式列表 echo '<xmp>'; print_r($cipher_list); print_r($mode_list);
若你的環(huán)境支持mcrypt,輸出結(jié)果應(yīng)該如下:
Array
(
[0] => cast-128
[1] => gost
[2] => rijndael-128
[3] => twofish
[4] => arcfour
[5] => cast-256
[6] => loki97
[7] => rijndael-192
[8] => saferplus
[9] => wake
[10] => blowfish-compat
[11] => des
[12] => rijndael-256
[13] => serpent
[14] => xtea
[15] => blowfish
[16] => enigma
[17] => rc2
[18] => tripledes
)
Array
(
[0] => cbc
[1] => cfb
[2] => ctr
[3] => ecb
[4] => ncfb
[5] => nofb
[6] => ofb
[7] => stream
)
例如本機(jī)采用wampserver環(huán)境,直接開(kāi)啟了mcrypt擴(kuò)展:
其中rijndael-128,rijndael-192,rijndael-256就是AES加密,3種分別是使用不同的數(shù)據(jù)塊和密鑰長(zhǎng)度進(jìn)行加密。
以下是使用擴(kuò)展mcrypt實(shí)現(xiàn)AES加密的簡(jiǎn)單示例
/** * 利用mcrypt做AES加密解密 * @author ts24<tsxw24@gmail.com> */ abstract class AES{ /** * 算法,另外還有192和256兩種長(zhǎng)度 */ const CIPHER = MCRYPT_RIJNDAEL_128; /** * 模式 */ const MODE = MCRYPT_MODE_ECB; /** * 加密 * @param string $key 密鑰 * @param string $str 需加密的字符串 * @return type */ static public function encode( $key, $str ){ $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND); return mcrypt_encrypt(self::CIPHER, $key, $str, self::MODE, $iv); } /** * 解密 * @param type $key * @param type $str * @return type */ static public function decode( $key, $str ){ $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND); return mcrypt_decrypt(self::CIPHER, $key, $str, self::MODE, $iv); } }
使用示例:
$str = '我是明文我是明文我是明文我是明文我是明文dsfdghgasdfasdddddddd'; $key = 'aSGJLGYEWERWRREW4567i8o'; $str1=AES::encode($key, $str); $str2=AES::decode($key, $str1); echo '<xmp>'; var_dump($str); var_dump($str1); var_dump($str2); var_dump(rtrim($str2));
輸出結(jié)果
問(wèn)題,不知道是什么原因,解密后的字符串(見(jiàn)上圖),末尾還留下有不可見(jiàn)的填充字符,當(dāng)明文剛好可以分組時(shí)則沒(méi)有。
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線(xiàn)工具:
文字在線(xiàn)加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在線(xiàn)加密工具:
http://tools.jb51.net/password/CreateMD5Password
在線(xiàn)散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線(xiàn)MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線(xiàn)sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
微信公眾平臺(tái)消息接口校驗(yàn)與消息接口響應(yīng)實(shí)例
這篇文章主要介紹了微信公眾平臺(tái)消息接口校驗(yàn)與消息接口響應(yīng)的方法,實(shí)例分析了微信公眾平臺(tái)開(kāi)發(fā)的具體步驟及wechatCallbackapiTest等類(lèi)的用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12php生成并下載word文件到本地實(shí)現(xiàn)方法詳解
要給最常用出租屋管理系統(tǒng)增加個(gè)合同功能,mark下知識(shí)點(diǎn)。要生成合同就需要使用phpword。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08ThinkPHP、Zend?Framework2、Yaf、Laravel框架路由大比拼
這篇文章主要介紹了ThinkPHP、Zend?Framework2、Yaf、Laravel框架路由大比拼的相關(guān)資料,需要的朋友可以參考下2015-03-03PHP跨時(shí)區(qū)(UTC時(shí)間)應(yīng)用解決方案
解決PHP跨時(shí)區(qū)應(yīng)用需要將將程序內(nèi)部時(shí)區(qū)設(shè)置為UTC時(shí)間.(UTC 也可以叫 GMT) 數(shù)據(jù)庫(kù)中存儲(chǔ)UTC時(shí)間等等,感興趣的朋友可以了解下2013-01-01Swoole 1.10.0新版本發(fā)布,增加了多項(xiàng)新特性
最近Swoole 1.10.0版本發(fā)布了,增加多項(xiàng)新特性,所以下面這篇文章主要給大家介紹了關(guān)于Swoole 1.10.0版本中新特性的相關(guān)資料,分享出來(lái)供大家參考學(xué)習(xí),需要的朋友可以參考下2018-01-01PHP+MySQL之Insert Into數(shù)據(jù)插入用法分析
這篇文章主要介紹了PHP+MySQL之Insert Into數(shù)據(jù)插入用法,實(shí)例分析了php+mysql基于Insert Into語(yǔ)句實(shí)現(xiàn)數(shù)據(jù)插入的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09