源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

php对称加密算法示例

  • 时间:2022-01-01 10:46 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:php对称加密算法示例
php对称加密算法 KEY 是之前定义的常量
[u]复制代码[/u] 代码如下:
Mcrypt::encrypt(); Mcrypt::decrypt();
[u]复制代码[/u] 代码如下:
defined('ROOT') or exit('Access Denied'); class Mcrypt{  public static function encrypt($code){   return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5(KEY), $code, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));  }  public static function decrypt($code){   return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5(KEY), base64_decode($code), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND));  } }
[b]常用对称加密算法(DES/AES)类[/b] xcrypt.php
[u]复制代码[/u] 代码如下:
/**  * 常用对称加密算法类  * 支持密钥:64/128/256 bit(字节长度8/16/32)  * 支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit)  * 支持模式:CBC/ECB/OFB/CFB  * 密文编码:base64字符串/十六进制字符串/二进制字符串流  * 填充方式: PKCS5Padding(DES)  *  * @author: linvo  * @version: 1.0.0  * @date: 2013/1/10  */  class Xcrypt{      private $mcrypt;      private $key;      private $mode;      private $iv;      private $blocksize;      /**      * 构造函数      *      * @param string 密钥      * @param string 模式      * @param string 向量("off":不使用 / "auto":自动 / 其他:指定值,长度同密钥)      */      public function __construct($key, $mode = 'cbc', $iv = "off"){          switch (strlen($key)){          case 8:              $this->mcrypt = MCRYPT_DES;              break;          case 16:              $this->mcrypt = MCRYPT_RIJNDAEL_128;              break;          case 32:              $this->mcrypt = MCRYPT_RIJNDAEL_256;              break;          default:              die("Key size must be 8/16/32");          }          $this->key = $key;          switch (strtolower($mode)){          case 'ofb':              $this->mode = MCRYPT_MODE_OFB;              if ($iv == 'off') die('OFB must give a IV'); //OFB必须有向量              break;          case 'cfb':              $this->mode = MCRYPT_MODE_CFB;              if ($iv == 'off') die('CFB must give a IV'); //CFB必须有向量              break;          case 'ecb':              $this->mode = MCRYPT_MODE_ECB;              $iv = 'off'; //ECB不需要向量              break;          case 'cbc':          default:              $this->mode = MCRYPT_MODE_CBC;          }          switch (strtolower($iv)){          case "off":              $this->iv = null;              break;          case "auto":              $source = PHP_OS=='WINNT' ? MCRYPT_RAND : MCRYPT_DEV_RANDOM;              $this->iv = mcrypt_create_iv(mcrypt_get_block_size($this->mcrypt, $this->mode), $source);              break;          default:              $this->iv = $iv;          }           }        /**      * 获取向量值      * @param string 向量值编码(base64/hex/bin)      * @return string 向量值      */      public function getIV($code = 'base64'){          switch ($code){          case 'base64':              $ret = base64_encode($this->iv);              break;          case 'hex':              $ret = bin2hex($this->iv);              break;          case 'bin':          default:              $ret = $this->iv;          }          return $ret;      }        /**      * 加密      * @param string 明文      * @param string 密文编码(base64/hex/bin)      * @return string 密文      */      public function encrypt($str, $code = 'base64'){          if ($this->mcrypt == MCRYPT_DES) $str = $this->_pkcs5Pad($str);          if (isset($this->iv)) {              $result = mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode, $this->iv);            } else {              @$result = mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode);            }          switch ($code){          case 'base64':              $ret = base64_encode($result);              break;          case 'hex':              $ret = bin2hex($result);              break;          case 'bin':          default:              $ret = $result;          }          return $ret;      }      /**      * 解密       * @param string 密文      * @param string 密文编码(base64/hex/bin)      * @return string 明文      */      public function decrypt($str, $code = "base64"){              $ret = false;          switch ($code){          case 'base64':              $str = base64_decode($str);              break;          case 'hex':              $str = $this->_hex2bin($str);              break;          case 'bin':          default:          }          if ($str !== false){              if (isset($this->iv)) {                  $ret = mcrypt_decrypt($this->mcrypt, $this->key, $str, $this->mode, $this->iv);                } else {                  @$ret = mcrypt_decrypt($this->mcrypt, $this->key, $str, $this->mode);                }              if ($this->mcrypt == MCRYPT_DES) $ret = $this->_pkcs5Unpad($ret);              $ret = trim($ret);          }          return $ret;       }     private function _pkcs5Pad($text){          $this->blocksize = mcrypt_get_block_size($this->mcrypt, $this->mode);            $pad = $this->blocksize - (strlen($text) % $this->blocksize);          return $text . str_repeat(chr($pad), $pad);      }      private function _pkcs5Unpad($text){          $pad = ord($text{strlen($text) - 1});          if ($pad > strlen($text)) return false;          if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;          $ret = substr($text, 0, -1 * $pad);          return $ret;      }      private function _hex2bin($hex = false){          $ret = $hex !== false && preg_match('/^[0-9a-fA-F]+$/i', $hex) ? pack("H*", $hex) : false;              return $ret;      } } 
上面类的使用方法
[u]复制代码[/u] 代码如下:
<?php  header('Content-Type:text/html;Charset=utf-8;');  include "xcrypt.php";  echo '<pre>';    $a = isset($_GET['a']) ? $_GET['a'] : '测试123';  //密钥  $key = '12345678123456781234567812345678'; //256 bit  $key = '1234567812345678'; //128 bit  $key = '12345678'; //64 bit  //设置模式和IV  $m = new Xcrypt($key, 'cbc', 'auto');  //获取向量值  echo '向量:';  var_dump($m->getIV());  //加密  $b = $m->encrypt($a, 'base64');  //解密  $c = $m->decrypt($b, 'base64');  echo '加密后:';  var_dump($b);  echo '解密后:';  var_dump($c);  echo '</pre>'; 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部