PHP AES加解密(兼容php5,php7)

最近在工作中负责对接API,对方要求对业务数据进行AES 算法(256,ECB,补码方式:PKCS5Padding)加密。
加密算法要求如下:
算法AES/ECB/PKCS5Padding
密钥长度256
bin2hex(2 进制转 16 进制)
PKCS5Padding的示例代码:
private function pkcs5_pad($text, $padlen){
$span = $padlen-(strlen($text)%$padlen);
return $text . str_repeat(chr($span),$span);
}
private function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}
获取PHP版本:
public $versions ='';
#构造函数
public function __construct(){
$this->versions=substr(PHP_VERSION,0,3)*10;
}
加密部分代码:
public function aes_encode($input)
{
if($this->versions<72){
// php<7.2
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
$size=mcrypt_get_block_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
// PKCS5Padding补码
$input=$this->pkcs5_pad($input, $size);
$encryptedStr = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$this->open_key, $input , MCRYPT_MODE_ECB,$iv);
$data = strtoupper(bin2hex($encryptedStr));
}else{
// php>7.2
$ivlen = openssl_cipher_iv_length("AES-256-ECB");
$iv = openssl_random_pseudo_bytes($ivlen);
$data = strtoupper(bin2hex(openssl_encrypt($input, "AES-256-ECB", $this->open_key, OPENSSL_RAW_DATA, $iv)));
}
return $data;
}
由于要求加密后并转化为大写
解密部分代码:
public function aes_decode($aesStr)
{
$aesStr=hex2bin($aesStr);
if($this->versions<72){
$decrypted=mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$this->open_key,$aesStr,MCRYPT_MODE_ECB);
$data=$this->pkcs5_unpad($decrypted);
}else{
$ivlen = openssl_cipher_iv_length("AES-256-ECB");
$iv = openssl_random_pseudo_bytes($ivlen);
$data=openssl_decrypt($aesStr,'AES-256-ECB',$this->open_key,OPENSSL_RAW_DATA,$iv);
}
return $data;
}
最后补充下,PKCS5Padding其实就是字符串填充的算法,关于PKCS5Padding和初始化向量(iv)的详细内容,欢迎大家自行查阅资料学习交流。
PHP AES加解密(兼容php5,php7)的更多相关文章
- AES加解密算法
直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中. php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被 ...
- 基于FPGA的AES加解密IP
Programmable AES Encryption/ Decryption IP 可编程AES加解密IP 可编程AES加解密IP提供了加解密算法功能,兼容美国国家标准与技术研究院(NIST)发布的 ...
- DES,AeS加解密,MD5,SHA加密
1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...
- c# Aes加解密和对象序列化
aes加解密 public class AesCryptto { private string key = "hjyf57468jhmuist"; private string i ...
- Java、C#双语版配套AES加解密示例
这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...
- AES加解密算法Qt实现
[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...
- aes加解密 Illegal key size
做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前 ...
- C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密
前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...
- Aes加解密,php
Aes类库 <?php namespace Aes; class Aes { /** * var string $method 加解密方法,可通过openssl_get_cipher_metho ...
- cryptoJS AES 加解密简单使用
简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...
随机推荐
- EOS基础全家桶(十)交易Action操作
简介 区块链上的所有操作都是通过交易(Transaction)上链的,无论你是转账交易还是发起的智能合约的调用,而EOS和传统区块链不同的是EOS在一个交易里可以发起多个行为(Action),这使得E ...
- 标准IDOC同步采购订单
目录 1功能说明 4 2功能实现 4 2.1创建逻辑系统并分配集团(SALE) 4 2.2维护RFC目标(SM59) 5 2.3在发送端创建模型视图(BD64) 5 2. ...
- Ubuntu1804 源码阅读神器,egypt+graphviz 图形化显示函数调用关系(超详细+图文并茂)
函数调用图可以让我们更加直观地了解到源码函数直接的调用和层次关系,提高阅读源码的效率,工欲善其事,必先利其器: 文章目录 1 前言 2 graphviz 安装 3 egypt 安装 4 测试 5 结论 ...
- 值得学习的C/C++开源项目 持续更新
值得学习的C语言开源项目 持续更新 文章目录 值得学习的C语言开源项目 持续更新 - 1. Webbench - 2. Tinyhttpd - 3. cJSON - 4. CMockery - 5. ...
- [hdu4300] next数组的应用
题意:给你一个密文和明文的对应表以及一个密文+明文的字符串,明文可能只出现前面的一部分(也就是说是原明文的前缀),求最短的明文. 思路:首先密文的长度至少占到一半,所以先把那一半解密,问题转化为找一个 ...
- Codeforces 949C(Data Center Maintenance,Tarjan缩点)
难度系数:1900 graphs 题意:有 n 个银行,m 个客户,每个客户都把自己的资料放在 2 个银行,一天总共有 h 小时,每个银行每天都要维护一小时,这一小时内银行无法工作,但是这一小时客户仍 ...
- Vue中如何监听组件的原生事件
在首页开发中,右下角有一个返回顶部的小箭头,将它单独封装成一个BackTop组件,但是它何时出现需要依赖于首页的滑动,即另外一个Scroll组件.如果直接在BackTop组件里面监听,则需要通过thi ...
- CSS像素与绝对像素
之前在电视的webview上投放广告页面时,遇到了个问题,就是视窗大小和文档大小不一致.最后发现原来有CSS Pixel这个概念,搜集了一些资料,希望能把这个问题捋捋清楚. 首先提出一个大家常常会忽略 ...
- axios请求拦截器(修改Data上的参数 ==>把data上的参数转为FormData)
let instance = axios.create({ baseURL: 'http://msmtest.ishare-go.com', //请求基地址 // timeout: 3000,//请求 ...
- Navicat for MySQL数据库管理工具安装和破解
Navicat for MySQL官方下载地址:https://www.navicat.com/en/download/navicat-for-mysql 1.下载后安装 navicat110_mys ...