php mcrypt模塊是一個(gè)非常常用的加密擴(kuò)展庫(kù),在php中使用它可以對(duì)傳輸?shù)拿舾袛?shù)據(jù)進(jìn)行加密。這個(gè)模塊常見(jiàn)的應(yīng)用場(chǎng)景包括但不限于對(duì)密碼、信用卡號(hào)、社會(huì)安全號(hào)碼等敏感數(shù)據(jù)進(jìn)行加密。應(yīng)用到支付網(wǎng)關(guān)、會(huì)員系統(tǒng)、第三方登錄等業(yè)務(wù)中,可以起到非常有效的保護(hù)用戶(hù)數(shù)據(jù)的作用。
很多人熟知的一個(gè)加密算法就是AES算法,md5, sha1等都是加密算法,它們都可以有這個(gè)拓展庫(kù)實(shí)現(xiàn)。這里以AES算法為例,簡(jiǎn)要介紹一下php mcrypt模塊的使用。
$key = 'key';//設(shè)置密鑰即可 $iv = 'iv';//初始化向量 $data = 'data';//要加密的數(shù)據(jù) $td = mcrypt_module_open('rijndael-128', '', 'cbc', ''); mcrypt_generic_init($td, $key, $iv); $encrypted = mcrypt_generic($td, $data); mcrypt_generic_deinit($td); mcrypt_module_close($td);
上面這段代碼就是一個(gè)AES加密數(shù)據(jù)的示例,其中$key、$iv、$data參數(shù)即為加密算法所需要的三個(gè)參數(shù)。其中$key是密鑰,可以自己隨便設(shè)置,建議大于16位;$iv是初始化向量,也是可以隨機(jī)生成的;$data就是要加密的數(shù)據(jù),調(diào)用函數(shù)
我們這里提到了調(diào)用函數(shù)
$key = 'key';//與加密時(shí)設(shè)置的一樣 $iv = 'iv';//同上 $data = $encryptedString;//加密后的字符串 $td = mcrypt_module_open('rijndael-128', '', 'cbc', ''); mcrypt_generic_init($td, $key, $iv); $decrypted = mdecrypt_generic($td, $data); mcrypt_generic_deinit($td); mcrypt_module_close($td);
這里我們調(diào)用了一個(gè)函數(shù)
在實(shí)際開(kāi)發(fā)過(guò)程中,通常我們不會(huì)使用mcrypt_generic()函數(shù)進(jìn)行數(shù)據(jù)加密,而是使用mcrypt_encrypt()函數(shù)進(jìn)行數(shù)據(jù)加密,因?yàn)樗鼈鞯膮?shù)更加易于理解。
$key = 'key'; $iv = 'iv'; $data = 'data'; $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $key = substr($key, 0, mcrypt_enc_get_key_size($cipher)); mcrypt_generic_init($cipher, $key, $iv); $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); mcrypt_generic_deinit($cipher); mcrypt_module_close($cipher);
這里說(shuō)明一下,函數(shù)mcrypt_encrypt()的第一個(gè)參數(shù)是加密算法的類(lèi)型,第二個(gè)參數(shù)是密鑰,第三個(gè)參數(shù)是要進(jìn)行加密的數(shù)據(jù),第四個(gè)參數(shù)是加密模式,第五個(gè)參數(shù)是初始化向量。
總結(jié)一下,php mcrypt模塊是php實(shí)現(xiàn)加密的常用拓展,可以結(jié)合AES、MD5等加密算法進(jìn)行使用,這樣可以自動(dòng)保護(hù)傳輸?shù)拿舾袛?shù)據(jù)。同時(shí)應(yīng)該注意構(gòu)造密鑰、初始化向量等參數(shù),保證加密安全性。在實(shí)際使用中,可以使用mcrypt_encrypt()函數(shù)方便清晰地實(shí)現(xiàn)數(shù)據(jù)加密。