一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP實現(xiàn)的AES加密、解密封裝類與用法示例

PHP實現(xiàn)的AES加密、解密封裝類與用法示例

2019-09-16 16:28u011474028 PHP教程

這篇文章主要介紹了PHP實現(xiàn)的AES加密、解密封裝類與用法,結合實例形式分析了php封裝的aes加密解密操作類及相關使用技巧,需要的朋友可以參考下

本文實例講述了PHP實現(xiàn)的AES加密、解密封裝類與用法。分享給大家供大家參考,具體如下:

<?php
/**
 * Class AES
 * 用于AES加解密數(shù)據(jù)
 * time:2018-04-27
 */
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 = 'm.ythuaji.com.cn';
$chgstr = $aes->encrypt($str);
echo $chgstr;
echo "<br/>";
$rstr = $aes->decrypt($chgstr);
echo $rstr;
?>

運行結果:

pDyiRRNaxlss2b6SgoiVPdkD2m1QWhX393lh2iFgGdY=
m.ythuaji.com.cn

希望本文所述對大家PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91精品综合久久久久久五月天 | 国产丰满美女做爰 | 精品欧美日韩一区二区三区 | 久久r视频 | s8sp加密路线和免费路线首页 | 欧美精品久久一区二区三区 | 美女天天操 | 亚洲AV蜜桃永久无码精品红樱桃 | 美女奶口隐私免费视频网站 | 国产一区视频在线免费观看 | 色老板在线免费视频 | 日韩精品亚洲一级在线观看 | 亚洲天堂网在线观看视频 | 亚洲午夜性春猛交xxxx | 日本69av| 国产私拍精品88福利视频 | 忘忧草在线社区WWW日本-韩国 | 国产精品视频网 | 亚洲国产99在线精品一区69堂 | 亚洲精品国产成人99久久 | 久久久久久久久人体 | 亚洲精品视频导航 | 白丝校花被扒开双腿喷水小说 | 俺去俺来也www色官网免费的 | 日本888xxxx| 交换朋友夫妇3中文字幕 | 美女张开下身让男人桶 | 亚洲 欧美 日本 国产 高清 | 欧美肥b| 国外欧美一区另类中文字幕 | 亚洲欧美在线免费观看 | 日本妇人成熟免费观看18 | 3d动漫免费| 精品高潮呻吟99AV无码 | 91xj视频| 亚洲欧美日韩中文字幕网址 | 午夜久久免影院欧洲 | 欧美草逼视频 | 亚洲 小说 欧美 激情 另类 | 男女男在线精品网站免费观看 | 北海市副市长黄江老公 |