php 实现RIJNDAEL_128加密(CBC模式,PKCS7填充)

本文详细介绍了AES加密算法的实现过程,包括初始化、加密和解密方法,并讨论了其在不同场景下的应用,特别关注了padding pkcs7方法在内容补充中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了不好的记性

class AESMcrypt{


    /**
     * 设置默认的加密key
     * @var str
     */
    public static $defaultKey = "";  

    /**
     * 设置默认加密向量
     * @var str
     */
    private $iv = '';
    
    /**
     * 设置加密算法
     * @var str
     */
    private $cipher;
    
    /**
     * 设置加密模式
     * @var str
     */
    private $mode;
    
    public function __construct($cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC){
        $this->cipher = $cipher;
        $this->mode = $mode;
    }
    
    /**
     * 对内容加密,注意此加密方法中先对内容使用padding pkcs7,然后再加密。
     * @param str $content    需要加密的内容
     * @return str 加密后的密文
     */
    public function encrypt($content){
        if(empty($content)){
            return null;
        }
        $srcdata = $content;
        $block_size = mcrypt_get_block_size($this->cipher, $this->mode);
        $padding_char = $block_size - (strlen($content) % $block_size);
        $srcdata .= str_repeat(chr($padding_char),$padding_char);
        return mcrypt_encrypt($this->cipher, $this->getSecretKey(), $srcdata, $this->mode, $this->iv);
    }   

    /**
     * 对内容解密,注意此加密方法中先对内容解密。再对解密的内容使用padding pkcs7去除特殊字符。
     * @param String $content    需要解密的内容
     * @return String 解密后的内容
     */
    public function decrypt($content){
        if(empty($content)){
            return null;
        }

        $content = mcrypt_decrypt($this->cipher, $this->getSecretKey(), $content, $this->mode, $this->iv);
        $block = mcrypt_get_block_size($this->cipher, $this->mode);
        $pad = ord($content[($len = strlen($content)) - 1]);
        return substr($content, 0, strlen($content) - $pad);
    }

}


由于使用的128算法,所以iv的size是16位,因此可以输入16位字符作为iv向量而无须再mcrypt_create_iv。同时为了兼容C#,使用了padding pkcs7作为对内容的补充。

另外补充一篇同类的文章:http://blog.sina.com.cn/s/blog_40e1ba640100scu7.html

转载于:https://my.oschina.net/u/435872/blog/131799

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值