您好,登錄后才能下訂單哦!
本文章向大家介紹怎么在PHP中實(shí)現(xiàn)一個(gè)AES加密、解密封裝類的基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下。
php是一個(gè)嵌套的縮寫(xiě)名稱,是英文超級(jí)文本預(yù)處理語(yǔ)言,它的語(yǔ)法混合了C、Java、Perl以及php自創(chuàng)新的語(yǔ)法,主要用來(lái)做網(wǎng)站開(kāi)發(fā),許多小型網(wǎng)站都用php開(kāi)發(fā),因?yàn)閜hp是開(kāi)源的,從而使得php經(jīng)久不衰。
具體如下:
<?php /** * Class AES * 用于AES加解密數(shù)據(jù) */ class AES { protected $cipher = MCRYPT_RIJNDAEL_256; //AES加密算法 protected $mode = MCRYPT_MODE_CBC; //采用cbc加密模式 protected $key; //密鑰 protected $iv; //cbc模式加密向量,如為空將采用密鑰代替 /** * AES constructor. * * @param $key 密鑰 * @param null $iv 向量 可選 如為空將采用密鑰代替 * * @throws Exception */ public function __construct($key, $iv = NULL) { if (!extension_loaded("mcrypt")) { // throw new \Exception("mcrypt extension do not exist. it was DEPRECATED in PHP 7.1.0, and REMOVED in PHP 7.2.0. use OpenSSL instead"); } $this->key = $key; $this->iv = $iv; } /** * 加密數(shù)據(jù) * @param $data * * @return string */ public function encrypt($data) { $td = mcrypt_module_open($this->cipher, '', $this->mode, ''); $key = hash("sha256", $this->key, true); $iv = isset($this->iv) ? hash("sha256", $this->iv, true) : $key; $data = $this->padding($data); mcrypt_generic_init($td, $key, $iv); $encryptedData = base64_encode(mcrypt_generic($td, $data)); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $encryptedData; } /** * 解密數(shù)據(jù) * @param $data * * @return bool|string */ public function decrypt($data) { $td = mcrypt_module_open($this->cipher, '', $this->mode, ''); $key = hash("sha256", $this->key, true); $iv = isset($this->iv) ? hash("sha256", $this->iv, true) : $key; mcrypt_generic_init($td, $key, $iv); $decrypted_data = mdecrypt_generic($td, base64_decode($data)); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $this->unPadding($decrypted_data); } /** * 填充數(shù)據(jù)到分組大小的整數(shù)倍 * @param null $data * * @return string */ protected function padding($data = null) { $blockSize = 32; //MCRYPT_RIJNDAEL_256算法的分組大小是32字節(jié) $pad = $blockSize - (strlen($data) % $blockSize); return $data . str_repeat(chr($pad), $pad); } /** * 去掉填充的數(shù)據(jù) * @param null $data * * @return bool|string */ protected function unPadding($data = null) { $pad = ord($data[strlen($data) - 1]); if ($pad > strlen($data)) { return false; } if (strspn($data, chr($pad), strlen($data) - $pad) != $pad) { return false; } return substr($data, 0, -1 * $pad); } /** * @return mixed */ public function getSecretKey() { return $this->key; } /** * @param mixed $key */ public function setSecretKey($key) { $this->key = $key; } /** * @return null */ public function getIv() { return $this->iv; } /** * @param null $iv */ public function setIv($iv) { $this->iv = $iv; } } //使用方法: $keyStr = 'sq8f77fwhksk'; $aes = new AES($keyStr); $str = 'www.jb51.net'; $chgstr = $aes->encrypt($str); echo $chgstr; echo "<br/>"; $rstr = $aes->decrypt($chgstr); echo $rstr;
以上就是小編為大家?guī)?lái)的怎么在PHP中實(shí)現(xiàn)一個(gè)AES加密、解密封裝類的全部?jī)?nèi)容了,希望大家多多支持億速云!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。