AES-128-ECB php兼容高低版本

这篇具有很好参考价值的文章主要介绍了AES-128-ECB php兼容高低版本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

class Aes {
    /**
     * 加密
     * @param $plain
     * @param $key
     * @return false|string
     */
    public static function encrypt($plain, $key)
    {
        if (trim($key) == '') {
            return false;
        }
        $key = self::_sha1prng($key);
        if(version_compare(PHP_VERSION,'7.1','>=')){
            $iv = '';
            $encrypted = openssl_encrypt($plain, 'AES-128-ECB', $key, OPENSSL_RAW_DATA, $iv);
        }else{
            $plain       = strval($plain);
            $block_size  = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
            $padded_data = self::_pkcs5_pad($plain, $block_size);
            $iv_size     = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
            $iv          = mcrypt_create_iv($iv_size, MCRYPT_RAND);
            $encrypted   = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $padded_data, MCRYPT_MODE_ECB, $iv);
        }
        return base64_encode($encrypted);
    }

    /**
     * aes解密
     * @param $cipher   密文
     * @param $key
     * @return false|string
     */
    public static function decrypt($cipher, $key)
    {
        if ( ! is_string($cipher) || trim($key) == '') {
            return false;
        }
        $key = self::_sha1prng($key);
        $decoded = base64_decode($cipher);
        if ($decoded){
            if(version_compare(PHP_VERSION,'7.1','>=')){
                $iv = '';
                return  openssl_decrypt($decoded, 'AES-128-ECB', $key, OPENSSL_RAW_DATA, $iv);
            }else{
                $block_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
                $iv         = mcrypt_create_iv($block_size, MCRYPT_RAND);
                $decrypted  = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $decoded, MCRYPT_MODE_ECB, $iv);
                return self::_pkcs5_unpad($decrypted);
            }
        }
        return false;
    }

    /**
     * SHA1PRNG算法
     * @param $key
     * @return string
     */
    private static function _sha1prng($key)
    {
        return substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);
    }

    private static function _pkcs5_pad($text, $block_size)
    {
        $pad = $block_size - (strlen($text) % $block_size);
        return $text . str_repeat(chr($pad), $pad);
    }

    private static function _pkcs5_unpad($text)
    {
        $end  = substr($text, -1);
        $last = ord($end);
        $len  = strlen($text) - $last;
        if (substr($text, $len) == str_repeat($end, $last)) {
            return substr($text, 0, $len);
        }
        return false;
    }
}

//使用方法:
$keyStr = 'sdez';
$aes = new Aes();
$str = '{"openCode":"a9ae-8394-49bb","phone":"9988","name":"test","type":"2"}';
$chgstr = $aes->encrypt($str,$keyStr);
echo $chgstr;
echo PHP_EOL;
$rstr = $aes->decrypt($chgstr,$keyStr);
echo $rstr;

文章来源地址https://www.toymoban.com/news/detail-487452.html

到了这里,关于AES-128-ECB php兼容高低版本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python实现AES-128#实现加密字符串和加密文件

    这篇文章是对之前的一篇文章的重写和优化AES加密算法基于python实现 脚本语言:Python 已实现的功能 明文和密密钥可以是任意字符:中文,字符,数字或符号。 ​ 明文长度任意,密钥的字节数不能超过16字节。默认编码为utf-8所以,密钥最多支持5个中文字符 待加密的数据:可

    2024年02月12日
    浏览(94)
  • php 调用python解密 AES-128-GCM

    因工作需要,要解密Java AES-128-GCM iv=16 模式的加密密文,找了php的很多方法,都无法解密成功,最后找了一个使用python3进行解密的方法,下面是解密方法: 主要是运用php的函数exec()执行Linux命令调用python运行python文件,获得返回结果。 注:此AES解密要用到python 3的 库 Crypto

    2024年01月18日
    浏览(50)
  • 20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片

    20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片 2023/7/21 22:58 1、前言: AES-128加密的ts视频切片【第一个】,打开有时间限制的! https://app1ce7glfm1187.h5.xiaoeknow.com/v2/course/alive/l_64af6130e4b03e4b54da1681?type=2app_id=app1cE7gLFM1187pro_id=term_645c69388953e_Nhew9Aavailable=trueshare_user_id=u_5e591188

    2024年02月16日
    浏览(42)
  • 前端CryptoJS-AES加解密 对应php的AES-128-CBC加解密踩坑(java也相同加解密)

     前端部分注意看填充是pkcs7 有个前提,要看前端有没有转成hex格式,如果没转,php那边就不需要调用特定函数转hex格式的 后端php代码

    2024年02月15日
    浏览(55)
  • php对称加密AES加密解密

    AES-128-ECB和AES-256-CBC是两种常见的AES加密模式,它们在加密方式和安全性上有以下区别: 加密方式: AES-128-ECB:ECB(Electronic Codebook)模式是最简单的AES加密模式,它将数据分成固定大小的块,每个块独立加密。这意味着相同的明文块将始终加密为相同的密文块,因此ECB模式不

    2024年02月09日
    浏览(64)
  • PHP AES加密:保护数据安全的高级加密技术

    ASE(Advanced Encryption Standard)是一种对称加密算法,也被称为Rijndael加密算法。它是由比利时密码学家Joan Daemen和Vincent Rijmen设计的,于2001年被美国国家标准与技术研究院(NIST)选定为高级加密标准。 ASE算法使用相同的密钥进行加密和解密操作,因此被归类为对称加密算法。它

    2024年01月17日
    浏览(51)
  • php常用加密算法大全aes、3des、rsa等

    目录 一、可解密加解密算法 1、aes 加解密算法 2、旧3des加解密方法  3、新3des加解密方法 4、rsa公私钥加解密、签名验签方法 5、自定义加密算法1  6、自定义加密算法2 7、自定义加密算法3 二、不可解密加密算法  1、md5算法  2、crypt算法 3、sha1算法 5、hash 算法 6、 password_ha

    2024年02月09日
    浏览(50)
  • php7使用openssl_encrypt函数进行AES加密

    前言 手上有个api对接需求,要用到AES加密,要用到openssl_encrypt函数,记录一下,鉴权要求大概如下。 将明文先base64加密,后取前16位 判断字符串的字节型数据长度是否为16倍整,如不是则进行补充(PKCS#7标准) 对字符串进行AES加密后base64加密,其中 iv=A-16-Byte-String 介绍 参数

    2023年04月08日
    浏览(45)
  • 前端通过AES进行加解密(ECB、CBC模式)

    在项目开发中,由于需要对接口传参的敏感信息进行加密传输,后端接口返回的参数也是进行加密过的,此时就需要进行加解密操作。 本篇文章使用AES进行加解密,AES加密算法提供了五种不同的工作模式:CBC,ECB,CTR,CFB,OFB 这里只对CBC和ECB加解密进行说明,这两种加密模

    2024年02月16日
    浏览(50)
  • ffmpeg 4.4版本对MP4文件进行AES-CTR加密,和流式加密

            对于ffmpeg的AES-CTR加密有两种方式,一个是普通的整个视频做加密,另一个是对视频做切片处理,然后进行加密。 直接使用下面的命令就行         简单解释一下各种参数的作用, -vcodec copy -acodec copy 只是将 animal.mp4的音视频数据直接拷贝到encrypted_IV3.mp4中 -encryptio

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包