栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

PHP如何实现AES加密、解密?方法介绍(代码示例)

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP如何实现AES加密、解密?方法介绍(代码示例)

1、mcrypt_encrypt AES加密,解密

class Lib_desEnctyp
{
    private $key = "";
    private $iv = "";

    
    function __construct ($key, $iv)
    {
 if (empty($key) || empty($iv)) {
     echo 'key and iv is not valid';
     exit();
 }
 $this->key = $key;
 $this->iv = $iv;
    }

    
    public function encrypt ($value)
    {
 $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
 $iv = base64_decode($this->iv);
 $value = $this->PaddingPKCS7($value);
 $key = base64_decode($this->key);
 mcrypt_generic_init($td, $key, $iv);
 $ret = base64_encode(mcrypt_generic($td, $value));
 mcrypt_generic_deinit($td);
 mcrypt_module_close($td);
 return $ret;
    }

    
    public function decrypt ($value)
    {
 $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
 $iv = base64_decode($this->iv);
 $key = base64_decode($this->key);
 mcrypt_generic_init($td, $key, $iv);
 $ret = trim(mdecrypt_generic($td, base64_decode($value)));
 $ret = $this->UnPaddingPKCS7($ret);
 mcrypt_generic_deinit($td);
 mcrypt_module_close($td);
 return $ret;
    }

    private function PaddingPKCS7 ($data)
    {
 $block_size = mcrypt_get_block_size('tripledes', 'cbc');
 $padding_char = $block_size - (strlen($data) % $block_size);
 $data .= str_repeat(chr($padding_char), $padding_char);
 return $data;
    }

    private function UnPaddingPKCS7($text)
    {
 $pad = ord($text{strlen($text) - 1});
 if ($pad > strlen($text)) {
     return false;
 }
 if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
     return false;
 }
 return substr($text, 0, - 1 * $pad);
    }
}

2、openssl 加密,解密 [方式1]

class DesEncrypt {
    private $key = "";
    private $iv = "";

    
    function __construct ($key, $iv)
    {
 if (empty($key) || empty($iv)) {
     echo 'key and iv is not valid';
     exit();
 }
 $this->key = $key;
 $this->iv = $iv;//8
 //$this->iv = $iv.'00000000000';//16

    }

    
    public function encrypt ($value) {

 //参考地址:https://stackoverflow.com/questions/41181905/php-mcrypt-encrypt-to-openssl-encrypt-and-openssl-zero-padding-problems#
 $value = $this->PaddingPKCS7($value);
 $key = base64_decode($this->key);
 $iv  = base64_decode($this->iv);
 //AES-128-ECB|不能用 AES-256-CBC|16 AES-128-CBC|16 BF-CBC|8 aes-128-gcm|需要加$tag  DES-EDE3-CBC|8
 $cipher = "DES-EDE3-CBC";
 if (in_array($cipher, openssl_get_cipher_methods())) {
     //$ivlen = openssl_cipher_iv_length($cipher);
    // $iv = openssl_random_pseudo_bytes($ivlen);
     $result = openssl_encrypt($value, $cipher, $key, OPENSSL_SSLV23_PADDING, $iv);
     //$result = base64_encode($result); //为3的时间要用
     //store $cipher, $iv, and $tag for decryption later
    
 }
 return $result;

    }
    
    public function decrypt ($value) {
 $key= base64_decode($this->key);
 $iv = base64_decode($this->iv);
 $decrypted = openssl_decrypt($value, 'DES-EDE3-CBC', $key, OPENSSL_SSLV23_PADDING, $iv);
 $ret = $this->UnPaddingPKCS7($decrypted);
 return $ret;
    }

    private function PaddingPKCS7 ($data) {
 //$block_size = mcrypt_get_block_size('tripledes', 'cbc');//获取长度
 //$block_size = openssl_cipher_iv_length('tripledes', 'cbc');//获取长度
 $block_size = 8;
 $padding_char = $block_size - (strlen($data) % $block_size);
 $data .= str_repeat(chr($padding_char), $padding_char);
 return $data;
    }
    private function UnPaddingPKCS7($text) {
 $pad = ord($text{strlen($text) - 1});
 if ($pad > strlen($text)) {
     return false;
 }
 if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
     return false;
 }
 return substr($text, 0, - 1 * $pad);
    }
}

3、openssl 加密,解密 [方式2]

class CI_Aes{
    
    protected $cipher = 'aes-128-ecb';
    
    protected $key;
    

    public function __construct($key=null){
 $this->key = $key;
    }

    
    public function initialize($params)
    {
 if (!empty($params) && is_array($params)) {
     foreach ($params as $key => $val) {
  $this->$key = $val;
     }
 }
    }
    
    public function encrypt($data) {
 $endata =  openssl_encrypt($data, $this->cipher, $this->key, OPENSSL_RAW_DATA);
 return  bin2hex($endata);
    }

    
    public function decrypt($data) {
 $encrypted = hex2bin($data);
 return openssl_decrypt($encrypted, $this->cipher, $this->key, OPENSSL_RAW_DATA);
    }

}

4、其他 加密,解密

//加密函数
function lock_url($txt,$key='www.jb51.net')
{
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
  $nh = rand(0,64);
  $ch = $chars[$nh];
  $mdKey = md5($key.$ch);
  $mdKey = substr($mdKey,$nh%8, $nh%8+7);
  $txt = base64_encode($txt);
  $tmp = '';
  $i=0;$j=0;$k = 0;
  for ($i=0; $i

相关教程推荐:《PHP教程》

以上就是PHP如何实现AES加密、解密?方法介绍(代码示例)的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/262870.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号