标准PHP的AES加密算法类

 更新时间:2023年05月03日 12:40:58   投稿:hebedich  
AES是分组密钥,算法输入128位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列)。每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。

分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128', 'ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcrypt_list_algorithms函数查看你需要的加密算法标识。

<?php
/**
 * AES128加解密类
 * @author dy
 *
 */
defined('InEjbuy') or exit('Access Invalid!');
class Aes{
    //密钥
    private $_secrect_key;
    public function __construct(){
        $this->_secrect_key = 'MYgGnQE2jDFADSFFDSEWsdD';
    }
    /**
     * 加密方法
     * @param string $str
     * @return string
     */
    public function encrypt($str){
        //AES, 128 ECB模式加密数据
        $screct_key = $this->_secrect_key;
        $screct_key = base64_decode($screct_key);
        $str = trim($str);
        $str = $this->addPKCS7Padding($str);
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);
        $encrypt_str =  mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_ECB, $iv);
        return base64_encode($encrypt_str);
    }
    /**
     * 解密方法
     * @param string $str
     * @return string
     */
    public function decrypt($str){
        //AES, 128 ECB模式加密数据
        $screct_key = $this->_secrect_key;
        $str = base64_decode($str);
        $screct_key = base64_decode($screct_key);
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);
        $encrypt_str =  mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_ECB, $iv);
        $encrypt_str = trim($encrypt_str);
        $encrypt_str = $this->stripPKSC7Padding($encrypt_str);
        return $encrypt_str;
    }
    /**
     * 填充算法
     * @param string $source
     * @return string
     */
    function addPKCS7Padding($source){
        $source = trim($source);
        $block = mcrypt_get_block_size('rijndael-128', 'ecb');
        $pad = $block - (strlen($source) % $block);
        if ($pad <= $block) {
            $char = chr($pad);
            $source .= str_repeat($char, $pad);
        }
        return $source;
    }
    /**
     * 移去填充算法
     * @param string $source
     * @return string
     */
    function stripPKSC7Padding($source){
        $source = trim($source);
        $char = substr($source, -1);
        $num = ord($char);
        if($num==62)return $source;
        $source = substr($source,0,-$num);
        return $source;
    }
}

PHP AES算法的通用函数

 function aesEncrypt($data, $key, $iv) {
    $cipher = "aes-256-cbc";
    $padding = OPENSSL_PKCS1_PADDING;
    $encrypted = openssl_encrypt($data, $cipher, $key, $padding, $iv);
    return base64_encode($encrypted);
}
function aesDecrypt($data, $key, $iv) {
    $cipher = "aes-256-cbc";
    $padding = OPENSSL_PKCS1_PADDING;
    $decrypted = openssl_decrypt(base64_decode($data), $cipher, $key, $padding, $iv);
    return $decrypted;
}

该函数使用AES-256-CBC加密算法和PKCS1填充模式。它需要三个参数:要加密/解密的数据,密钥和初始化向量(IV)。在加密时,数据将被加密并返回Base64编码的字符串。在解密时,Base64编码的字符串将被解码并返回原始数据。

以上就是本文所述的全部内容了,希望对大家学习php的AES加密算法类有所帮助。

相关文章

  • php猴子选大王问题解决方法

    php猴子选大王问题解决方法

    这篇文章主要介绍了php猴子选大王问题解决方法,其本质为约瑟夫环问题,这里提供了一种较为简单的解决方法,需要的朋友可以参考下
    2015-05-05
  • php+xml实现在线英文词典查询的方法

    php+xml实现在线英文词典查询的方法

    这篇文章主要介绍了php+xml实现在线英文词典查询的方法,通过将XML文件作数据库实现查询英文对应汉字的功能,需要的朋友可以参考下
    2015-01-01
  • PHP获取对象属性的三种方法实例分析

    PHP获取对象属性的三种方法实例分析

    这篇文章主要介绍了PHP获取对象属性的三种方法,结合实例形式分析了php面向对象程序设计中获取对象属性的常见操作技巧,需要的朋友可以参考下
    2019-01-01
  • php apache开启跨域模式过程详解

    php apache开启跨域模式过程详解

    这篇文章主要介绍了php apache开启跨域模式过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • php UBB 解析实现代码

    php UBB 解析实现代码

    今天看thinkphp演示文档看到这个ubb的代码感觉还可以。
    2011-11-11
  • Windows下的PHP安装pear教程

    Windows下的PHP安装pear教程

    这篇文章主要介绍了Windows下的PHP安装pear教程,本文在CMD中使用PHP命令安装pear,不同网上的其他教程,需要的朋友可以参考下
    2014-10-10
  • PHP打印输出函数汇总

    PHP打印输出函数汇总

    本文给大家汇总介绍了7种php常用的打印输出函数,分别是echo,print,printf,sprintf,print_r,var_dump,die,希望对大家学习php能够有所帮助
    2016-08-08
  • php中strtotime函数用法详解

    php中strtotime函数用法详解

    这篇文章主要介绍了php中strtotime函数的用法,以实例形式详细分析了strtotime函数的参数含义与相应的用法,适用于时间格式变换的情况,需要的朋友可以参考下
    2014-11-11
  • PHP简单获取网站百度搜索和搜狗搜索收录量的方法

    PHP简单获取网站百度搜索和搜狗搜索收录量的方法

    这篇文章主要介绍了PHP简单获取网站百度搜索和搜狗搜索收录量的方法,涉及php网页文件的读取及正则替换的相关操作技巧,需要的朋友可以参考下
    2016-08-08

最新评论