当前位置:首页 > 技术分享

php Aes 加密模式ECB填充pkcs5padding base64

admin6年前 (2021-03-22)技术分享4129

最近做支付项目用到了aes加密不过试了好多办法总是和官方给出的结果不一样,找了很久终于找到了

测试结果同 http://tool.chacuo.net/cryptaes/

<?php
/**
 * [Aes 加密,支持PHP5+]
 * 算法模式:ECB
 * 密钥长度:128
 * 补码方式:PKCS5Padding
 * 解密串编码方式:base64/十六进制
 * 编码 UTF-8
 */
class Aes {
    public function encrypt($input, $key) {
        if (substr(PHP_VERSION, 0, 1) == '7') {
            return $this->opensslEncrypt($input,$key);
        }else{
            return $this->mcryptEncrypt($input,$key);
        }
    }
    public function decrypt($input, $key) {
        if (substr(PHP_VERSION, 0, 1) == '7') {
            return $this->opensslDecrypt($input,$key);
        }else{
            return $this->mcryptDecrypt($input,$key);
        }
    }
    /**
     * [encrypt description]
     * 使用mcrypt库进行加密
     * @param  [type] $input
     * @param  [type] $key
     * @return [type]
     */
    public function mcryptEncrypt($input, $key) {
        $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
        $input = $this->pkcs5Pad($input, $size);
        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);//MCRYPT_DEV_URANDOM
        mcrypt_generic_init($td, $key, $iv);
        $data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $data = base64_encode($data);
        return $data;
    }
    /**
     * [pkcs5Pad description]
     * @param  [type] $text
     * @param  [type] $blocksize
     * @return [type]
     */
    private function pkcs5Pad($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }
    /**
     * [decrypt description]
     * 使用mcrypt库进行解密
     * @param  [type] $sStr
     * @param  [type] $sKey
     * @return [type]
     */
    public function mcryptDecrypt($sStr, $sKey) {
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);//MCRYPT_DEV_URANDOM
        $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $sKey, base64_decode($sStr), MCRYPT_MODE_ECB, $iv);
        $dec_s = strlen($decrypted);
        $padding = ord($decrypted[$dec_s-1]);
        $decrypted = substr($decrypted, 0, -$padding);
        return $decrypted;
    }
    /**
     * [opensslDecrypt description]
     * 使用openssl库进行加密
     * @param  [type] $sStr
     * @param  [type] $sKey
     * @return [type]
     */
    public function opensslEncrypt($sStr, $sKey, $method = 'AES-256-ECB'){
        $str = openssl_encrypt($sStr,$method,$sKey);
        return $str;
    }
    /**
     * [opensslDecrypt description]
     * 使用openssl库进行解密
     * @param  [type] $sStr
     * @param  [type] $sKey
     * @return [type]
     */
    public function opensslDecrypt($sStr, $sKey, $method = 'AES-256-ECB'){
        $str = openssl_decrypt($sStr,$method,$sKey);
        return $str;
    }
}
?>


扫描二维码推送至手机访问。

版权声明:本文由小刚刚技术博客发布,如需转载请注明出处。

本文链接:https://blog.bitefu.net/post/143.html

分享给朋友:

“php Aes 加密模式ECB填充pkcs5padding base64 ” 的相关文章

2021可用的百度网盘高速下载方法分享

2021可用的百度网盘高速下载方法分享

最新可用方法https://blog.bitefu.net/post/163.html方法很简单就是利用网盘直链下载助手【网盘直链下载助手】是一款免费开源获取网盘文件真实下载地址的油猴脚本,基于PCSAPI,支持Windows,Mac,Li…

VirtualXposed 不支持32位应用 32位无法安装问题解决办法

VirtualXposed 不支持32位应用 32位无法安装问题解决办法

VirtualXposed 是基于VirtualApp 和 epic 在非ROOT环境下运行Xposed模块的实现(支持5.0~10.0)。与 Xposed 相比,目前 VirtualXposed 有…

安卓模拟器连接端口 及常用命令

下面是我总结和测试通过的:有的是搜集来的模拟器名称                     &nbs…

抢先体验太阳谷!20H1、20H2、21H1替换“Dev版新图标”

尽量不要替换shell32.dll.mun和zipfldr.dll.mun,这两老哥可能会带来无法预测的风险!不解除被替换文件的硬链接,已确定会导致无法安装质量更新!(详见H大测评)单替换imageres.dll.mun新图标覆盖率基本可达…

python3 selenium webdriver.Chrome php 爬取汽车之家所有车型详情数据[开源版]

介绍本接口是车型库api的补充,用于爬取汽车之家所有车型详情数据开源地址:https://gitee.com/web/CarApi/tree/master/python软件架构python3 selenium webdriver.Chrom…

记一次阿里云服务器cc攻击防护 windows 2012 iis8

记一次阿里云服务器cc攻击防护 windows 2012 iis8

上次连续一周左右阿里云服务器都在遭受cc攻击.导致访问量特别大,节假日接口调用特别缓慢或者根本访问不了的情况.本身服务器安装了 网站安全狗(IIS版) .并开始了防cc攻击.但是呢,平时还行,这次压力山大.于是一气之下用pytho…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。