直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中。

php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.

[php] view plaincopy
  1. class Aes {
  2. private $hex_iv = '00000000000000000000000000000000'; # converted JAVA byte code in to HEX and placed it here
  3. private $key = '397e2eb61307109f6e68006ebcb62f98'; #Same as in JAVA
  4. function __construct($key) {
  5. $this->key = $key;
  6. $this->key = hash('sha256', $this->key, true);
  7. }
  8. /*
  9. function encrypt($str) {
  10. $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
  11. mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv));
  12. $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
  13. $pad = $block - (strlen($str) % $block);
  14. $str .= str_repeat(chr($pad), $pad);
  15. $encrypted = mcrypt_generic($td, $str);
  16. mcrypt_generic_deinit($td);
  17. mcrypt_module_close($td);
  18. return base64_encode($encrypted);
  19. }
  20. function decrypt($code) {
  21. $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
  22. mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv));
  23. $str = mdecrypt_generic($td, base64_decode($code));
  24. $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
  25. mcrypt_generic_deinit($td);
  26. mcrypt_module_close($td);
  27. return $this->strippadding($str);
  28. }*/
  29. public function encrypt($input)
  30. {
  31. $data = openssl_encrypt($input, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));
  32. $data = base64_encode($data);
  33. return $data;
  34. }
  35. public function decrypt($input)
  36. {
  37. $decrypted = openssl_decrypt(base64_decode($input), 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));
  38. return $decrypted;
  39. }
  40. /*
  41. For PKCS7 padding
  42. */
  43. private function addpadding($string, $blocksize = 16) {
  44. $len = strlen($string);
  45. $pad = $blocksize - ($len % $blocksize);
  46. $string .= str_repeat(chr($pad), $pad);
  47. return $string;
  48. }
  49. private function strippadding($string) {
  50. $slast = ord(substr($string, -1));
  51. $slastc = chr($slast);
  52. $pcheck = substr($string, -$slast);
  53. if (preg_match("/$slastc{" . $slast . "}/", $string)) {
  54. $string = substr($string, 0, strlen($string) - $slast);
  55. return $string;
  56. } else {
  57. return false;
  58. }
  59. }
  60. function hexToStr($hex)
  61. {
  62. $string='';
  63. for ($i=0; $i < strlen($hex)-1; $i+=2)
  64. {
  65. $string .= chr(hexdec($hex[$i].$hex[$i+1]));
  66. }
  67. return $string;
  68. }
  69. }

PHP7.2中AES加密解密方法mcrypt_module_open()替换方案相关推荐

  1. php7.1 aes 加密解密,PHP7.1中AES加密解密方法 mcrypt_module_open()替换方案

    mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被废弃并且被 OpenSSL 所取代. 从PHP 7.2起它将被从核心代码中移除并且移到PECL中. PHP手册在7.1迁移页面给出了替 ...

  2. CryptoJS、Java中aes加密解密

    前台 加密 // 16进制密文 function aesHexCryptoAesEncryption(word) {if (typeof (word) === 'object') { // 对象格式的 ...

  3. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件 [cpp] view plaincopy #import <CommonCrypto/CommonDigest. ...

  4. 理解AES加密解密的使用方法

    很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...

  5. C#常用加密解密方法(AES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  6. MySQL自带的AES加密解密比较常用的使用方法

    接手的老项目中,有些SQL使用了MySQL自带的AES加密解密,为了方便操作数据,研究了一下使用方法,在这里记录一下. 加密 update user_password set password = H ...

  7. 基于PHP和JS的AES相互加密解密方法详解(CryptoJS)

    在最近的项目中,前端后台数据交互需要进行加密之后传输使用,以保证系统数据的安全.有关数据加密解密的问题,有很多种加密的方式,在这里我选择了AES的加密方式.特此写下此篇博文,总结讲述下PHP和JS进行 ...

  8. java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例

    前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下 ...

  9. C#开发中关于加密解密字符串的使用方法

    C#开发中关于加密解密字符串的使用方法 C#加密解密字符串方法 首先在web.config | app.config 文件下增加如下代码: <?xml version="1.0&quo ...

最新文章

  1. #164 (Div. 2)
  2. 【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 库文件说明 | 配置过程 )
  3. 八个开源的 Spring Boot 学习资源,你值得拥有
  4. java 拦截所有路径_Java或Web中解决所有路径问题
  5. 算法学习笔记(三)-----各种基础排序问题
  6. 前端学习(2599):请求操作
  7. 70 SD配置-发票凭证配置-定义回扣协议类型
  8. RCNN,fast R-CNN,faster R-CNN
  9. [CC-CHEFINV]Chef and Swaps
  10. (2)I/O流对象-----FilterInputStream与FilterOutputStream
  11. matlab兔子问题,【matlab】狼追击兔子问题的建模
  12. 安装corelDraw x8过程遇到的坑
  13. 0704函数的递归调用
  14. excel求方差和标准差的函数_Excel计算方差和标准差
  15. java date类 时区_Java Date 与时区
  16. 网易2016招聘笔试升级之路Java代码
  17. 1. python爬虫
  18. 手写一个vue中英文翻译组件
  19. Ubuntu1804安装
  20. android vector 圆形,Android中矢量图形的那些事 - SVG or Vector

热门文章

  1. 微信可以改彩色昵称了
  2. ] 爆笑囧人囧事2009大合集![
  3. 【排序】冒泡排序与快速排序(三个版本+非递归图示详解哦)
  4. C语言中对字符串的加密和解密
  5. 曾经的最爱-----暗黑破坏神zz
  6. 前端学习-VUE框架
  7. 微信小程序免费资源大全
  8. 网上关于'好人卡'的定义
  9. 中国工商银行网上银行B2C在线支付接口说明
  10. 中国工商银行网上银行新B2C在线支付接口文档下载地址