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

news/2024/10/31 3:31:39/
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;

http://www.ppmy.cn/news/365030.html

相关文章

[原创]我的读研两年半(更新6/6/2006)

注意:本帖内的每个网址(URL)均可直接点饥可以进入。另外,由于本人读研所学细分的专业属于工程应用类型,所以需要项目实践加深学习,请一些研究理论学问,家庭宽裕的同学(例如材料科学&…

我的读研两年[zz]

注意:本帖内的每个网址(URL)均可直接点饥可以进入。另外,由于本人读研所学细分的专业属于工程应用类型,所以需要项目实践加深学习,请一些研究理论学问,家庭宽裕的同学(例如材料科学&…

Element常用组件之 表单组件 form

1. 建立form.vue <template><el-form ref"form" :model"form" label-width"80px"><el-form-item label"活动名称"><el-input v-model"form.name"></el-input></el-form-item><el-f…

“我只想找个测试岗,你却百般刁难我!”给我们带来的思考

最近看到一篇帖子&#xff0c;讲的是一个七八年的大龄测试员被公司补偿性裁员后&#xff0c;找工作的糟心经历。 原文是酱紫的&#xff1a; ---------------------------------------- 不管怎么说&#xff0c;我做测试也有七八年了&#xff0c;一直觉得自己的技术还是可以的&…

快乐之道:游戏设计的黄金法则

如喜欢本书&#xff0c;请购买正版。 外界评价 《快乐之道》阐述了一些最基础的原理&#xff0c;它们不仅适用于游戏&#xff0c;也适用于所有的娱乐。更好的是&#xff0c;这本书用一种清晰、富有洞察力并且饶有情趣的风格做到了这一点&#xff01;对于任何做过游戏或者玩过游…

【笔试强训选择题】Day24.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

一键修改QQ运动刷步助手 V3.0

运动刷步助手是一款方便易用的QQ运动刷步数软件。该软件支持QQ/微信免费刷步数、一键自定义步数等功能&#xff0c;让你随心所欲修改步数。 【功能特点】  QQ刷步&#xff1a;切换QQ步数修改功能&#xff0c;输入想修改的步数点击提交即可&#xff0c;如果QQ运动步数没有及时…